1.模拟实现strncpy 
<1.>strncpy相比于strcpy增加了size_t参数可以实现最多拷贝的字节数
<2.>(size_t不可以超出拷贝存放的内存大小)来保证不会超出destanaton的内存,
<3.>但是需要注意的是,如果你需要拷贝的长度小于源字符串长度,那么strncpy不会在末尾加'\0'
 #include<stdio.h>
#include<assert.h>
#include<string.h>
char* Strncpy(char* destination, const char* source, size_t num)
{
size_t i = ;
while (i<num)
{
destination[i] = source[i];
++i;
}
return destination;
}
int main()
{
char str1[] = "To be or not to be";
char str2[];
char str3[];
//拷贝最大的字节
Strncpy(str2, str1, sizeof(str2));
//拷贝小于str1的字节
Strncpy(str3, str2, );
str3[] = '\0'; //需要自己加如'\0'
puts(str1);
puts(str2);
puts(str3);
return ;
}
 
2.模拟实现strncat
<1.>现在destination函数中找到'\0',然后将source函数中的num个字符拼接到destination中
<2.>注意source函数不能修改,需要加const
<3.>返回结果是指针类型

 #include<stdio.h>
#include<assert.h>
char* Strncat(char* destination, const char* source, size_t num)
{
//检查合法性
assert(destination != NULL);
assert(source != NULL);
//找到destination中的'\0'
int i = ;
while (destination[i]!='\0')
{
i++;
}
//拼接字符串
for (int j = ; num > ; i++, j++, num--)
{
destination[i] = source[j];
}
destination[i] = '\0';
return destination;
}
int main()
{
char str1[] = "abcd";
char str2[] = "efghijklmn";
//拼接前4个字符
Strncat(str1,str2,);
puts(str1);
printf("\n");
//拼接全部字符,(因为上一个Strncat已经改变了str1的值)
Strncat(str1, str2, sizeof(str2));
puts(str1);
return ;
}
 
3.模拟实现strncmp
<1.>strncmp返回值与strcmp一样
<2.>如果str1与str2前num个字符一样则返回0
<3.>str1小于str2则返回一个小于0的数
<4.>str1大于str2则返回一个大于0的数
 #include <stdio.h>
#include<assert.h>
#include<string.h>
int Strncmp(const char* str1, const char* str2, size_t num)
{
assert(str1 != NULL);
assert(str2 != NULL);
while (num>)
{
if (*str1 > *str2)
{
return ;
}
else if (*str1 < *str2)
{
return -;
}
else if (*str1 == *str2)
{
str1++;
str2++;
num--;
}
else
{
str1++;
str2++;
num--;
}
}
return ;
}
int main()
{
char str1[] = "abcdef";
char str2[] = "abty";
//模拟实现Strncmp
printf("%d\n", Strncmp(str1, str2, ));//前两个字符相等
printf("%d\n", Strncmp(str1, str2, ));//前三个字符不相等
printf("%d\n", Strncmp("abcde", "abc", ));//str1大于str2
printf("%d\n", Strncmp("abc", "abcde", ));//str1小于str2
printf("\n");
//库函数strncmp
printf("%d\n", strncmp(str1, str2, ));
printf("%d\n", strncmp(str1, str2, ));
printf("%d\n", strncmp("abcde", "abc", ));
printf("%d\n", strncmp("abc", "abcde", ));
return ;
}

模拟实现strncpy,strncat,strncmp的更多相关文章

  1. C语言之库函数的模拟与使用

    C语言之库函数的模拟与使用 在我们学习C语言的过程中,难免会遇到这样的一种情况: 我们通常实现一个功能的时候,费尽心血的写出来,却有着满满的错,这时却有人来告诉你说:这个功能可以用相应的库函数来实现. ...

  2. C/C++中经常使用的字符串处理函数和内存字符串函数

    一.            字符处理函数 1.        字符处理函数:<ctype.h> int isdigit(int ch) ;//是否为数字,即ch是否是0-9中的字符 int ...

  3. C语言扫盲及深化学习

    c语言特点: (1)效率高 (2)控制性强 (3)硬件亲和性好 (4)可移植性高 一.关于注释 c语言中注释不能嵌套,因此注释代码时一定要注意源代码中是否已经存在注释.要从逻辑上删除一段代码,利用预编 ...

  4. C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

  5. C语言-字符串函数的实现(一)之strlen

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  6. 字符串函数的实现(三)之strcat

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  7. C语言-字符串函数的实现(五)之strstr

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  8. C语言-字符串函数的实现(二)之strcpy

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  9. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

随机推荐

  1. 5.7 C++函数调用操作符重载

    参考:http://www.weixueyuan.net/view/6385.html 总结: 需要以类成员函数的形式对函数调用操作符“()”进行重载. 只有常成员函数才能处理常对象,故我们依然在类中 ...

  2. 关于Java的特点之封装

    抽象 1.简单理解 我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版).这种研究问题的方法称为抽象. 封装--什么是封装 封装就是把抽象出来的数据和对 ...

  3. activiti 插件安装,以及初始化配置

    1.安装插件 2.添加pom 3.配置activiti.cfg.xml 4.绘制业务流程图 MyProcess.bpmn 5.加载activiti数据表 6.创建流程 1.安装eclipse acti ...

  4. os与操作系统进行交互,sys解释器相关,random随机数,shutil解压和压缩

    1.os 与操作系统相关 对文件的处理 对路径的处理 import os#主要用于与操作系统进行交互 掌握: print(os.makedirs('a/b/c'))#创建目录 可用递归创建 print ...

  5. python,monkey-patch【猴子补丁】

    用来运行时动态修改已有的代码,而不需要修改原始代码,在gevent[协程]中.会在开头的地方gevent.monkey.patch_all(),把标准库中thead.sockcet等给替换掉,这样我们 ...

  6. 【Python】爬虫-2

    8. urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL的headers),urllib.urlopen只接收一个url ...

  7. 使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:"

    PHPMailer项目地址:https://github.com/PHPMailer/PHPMailer 项目中用到PHPMailer,使用过程中报错:"Connection failed. ...

  8. Gym - 101002H: Jewel Thief (背包,分组,DP决策单调性)

    pro:给定N,M.输入N个物品,(si,vi)表示第i个物品体积为si,价值为vi,s<=300,vi<=1e9: N<1e6:现在要求,对于背包体积为1到M时,求出最大背包价值. ...

  9. jquery实现拖拽进度条并显示百分比的特效

    #box{position: relative; width: 200px; height: 50px; border: 1px solid #eee; margin: 50px auto 0;} # ...

  10. C语言-第一周作业

    要求1: 请在你的PC或者移动设备上安装词典,该词典工具能对计算机术语进行翻译.需要在你的博客中给出安装软件的截图,请确保阅读者能从截图判断出你的被安装的设备是PC或者移动设备.(5经验值) 要求2: ...