1、函数原型
1.1 strcpy
char *strcpy(char *dest, const char *src);
/*
头文件:#include <string.h>
功能:将src中的内容复制到dest中
参数:
@dest:目标地址
@src:要复制的字符串
返回值:指向dest的指针
*/
1.2 strncpy
char *strncpy(char *dest, const char *src, size_t n);
/*
头文件:#include <string.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
参数:
@dest:目标地址
@src:要复制的字符串
@n:复制的字符串长度
返回值:指向dest的指针
*/
2、strcpy与strncpy存在的问题
2.1 strcpy的问题
strcpy的拷贝是把含有 '\0' 结束符的字符串复制到另一个地址空间,所有如果目标地址的地址空间不够大的话,就会导致缓存区溢出的问题。
2.2 strncpy的问题
strncpy复制的是字符,是不会复制 '\0' 的,但是strcpy是复制的字符串,会复制 '\0',所以,如果目标地址中有数据的话,就可能会导致错误,所以在使用strncpy时,可以使用以下两个方法:
1、在复制前将目标地址清'0'
2、在复制完成后在最后一位加上 '\0'
//法一
char src[10]= "123456789";
char dest[10];
memset(dest, '\0', sizeof(dest));
strncpy(str, p, sizeof(str) - 1);
//法二
char src[10]= "123456789";
char dest[10];
strncpy(str, p, sizeof(str) - 1);
dest[sizeof(str)-1] = '\0';