字符串函数(一) strcpy和strncpy

房东的猫 提交于 2020-02-02 21:21:27

Strcpy:

Char *strcpy(char *dst, const char *scr);

返回值为dst的首地址

下面是一段应用代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 # define MAX 40
 4 int main()
 5 {
 6     char *a="beast";
 7     char b[MAX] ="you are the beast one";    
 8     char *p;
 9     p = strcpy(b+8,a);
10     puts(a);
11     puts(b);
12     puts(p);
13     return 0;
14 } 

注意!!!

在函数的处理过程中 字符数组b已经被修改 从第九个字符't' 开始被字符串a="beast“ 替代  并且字符串结尾处的‘\0'也会被写入,并且从此截断(因为\0标志着结束,不会读入之后的字符)所以b输出结果为you are bea

而前面也提到了 strcpy函数 返回值为指针dst 即b+8的首地址, 所以输出结果为beast, 即从p的第九个字符开始。

 

所以strcpy不能完成将某一字符串插入到另一字符串的中间位置上,并保留其余字符。

所以C语言中出现了函数Strncpy

Char *strncpy(char *dst, const char *scr, size_t n);

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 # define MAX 40
 4 int main()
 5 {
 6     char *a="beast";
 7     char b[MAX] ="you are the beast one";    
 8     strncpy(b+4,a,3);
 9     puts(b);
10     return 0;
11 } 

 

由运行结果可知 strncpy 函数  将 字符串 a 的 前三个字符 从位置 b+4开始覆盖在了 字符串b上

 总结:

strncpy 相较于 strcpy 更加安全,不会出现内存溢出

 

参考资料 https://blog.csdn.net/weixin_33912445/article/details/86300019

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!