strlen() 和 strcpy()函數的區別,這兩個一個是返回一個C風格字符串的長度,一個是對一個C風格字符串的拷貝,兩個本來功能上是不同的,此外,他們還有一些細小的區別:strlen("hello")返回的結果是5,是不包含字符串結尾處的‘\0’,但是strcpy(str1,str2),會拷貝str2中的‘\0’。
在使用strlen()的返回值去為strcpy的第一個參數分配空間的時候一定要注意!
舉個例子:
char *str = "hello";
int length = strlen(str);
char char_array[5];
strcpy(char_array,str);
printf("the new string is:%s\n",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];