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
来源:https://www.cnblogs.com/2020cs/p/12253482.html