C strcpy
头文件
string.h
函数原型
char *strcpy(char *dst, const char *src);
返回的是第一个参数dst的拷贝。
注意事项
dst的约束
由于 dst 参数将进行修改,所以它必须是一个字符串数组或者一个指向动态分配内存的数组指针,不能是字符串常量,而且必须保证有足够的空间。代码举例:
这样是可以的
char *src = "***";
char string[10];
int main()
{
strcpy(string,src);
printf("%s\n",string); // ***
return EXIT_SUCCESS;
}
下面这样不可以,程序将无法运行。
//抛出"segmentation fault"
char *src = "***";
char *string;
int main()
{
strcpy(string,src);
printf("%s\n",string);
return EXIT_SUCCESS;
}
// 抛出 “abort”
char *src = "***";
char string[1];
int main()
{
strcpy(string,src);
printf("%s\n",string);
return EXIT_SUCCESS;
}
目标参数以前的内容将被覆盖
如果dst有其他内容,那么内容会被覆盖。代码说明下
char *src = "***";
char string[] = "123456";
int main()
{
strcpy(string,src);
printf("%s\n",string); // ***
return EXIT_SUCCESS;
}
这样的复制将触发覆盖。我们可以对比下前后string的内存布局:
之前:{ '1', '2', '3', '4', '5', '6', NUL }
之后:{ '*', '*', '*', NUL, '4', '5', '6', NUL }