strlen() 和 strcpy()函数

strlen() 和 strcpy()函数的区别,这两个一个是返回一个C风格字符串的长度,一个是对一个C风格字符串的拷贝,两个本来功能上是不同的,此外,他们还有一些细小的区别:strlen("hello")返回的结果是5,是不包含字符串结尾处的‘’,但是strcpy(str1,str2),会拷贝str2中的‘’

在使用strlen()的返回值去为strcpy的第一个参数分配空间的时候一定要注意!

举个例子:

char *str = "hello";
int length = strlen(str);
char char_array[5];
strcpy(char_array,str);
printf("the new string is:%s ",char_array);
cout<<"str's length is: "<<length<<endl;

这样输出的length是5,但是编译器会提示错误,VS2010提示是:

说明字符串数组定义小了,换成大小为6的数组则恢复正常。

在此,建议在使用strcpy的时候,目标数组(第一个参数)的大小应该设置为strlen()函数返回值+1 的值,或者建议使用如下的初始化数组方式:

char char_array[sizeof("hello")];
char * char_array_two = new char[strlen(str) + 1];

参考资料:

http://baike.baidu.com/link?url=QfLOtNdldgq29v53l6wKhyeB7AFxrejppntX3mhL5DHw03heqHLyRGT4Vo1b38YxgQdY8aruLeoT5h6XqLzhka

http://blog.csdn.net/yasi_xi/article/details/9088291

原文地址:https://www.cnblogs.com/bugking/p/3639196.html