main()
{
char a[]="abss";
char c[]="";
strcpy(c,a);
printf("%s",a);
}
爲什麼源串a
變化對使用strcpy()
只有當字符串c
大於或等於串a
檢查?爲什麼調用strcpy()會導致我的源字符串發生更改?
main()
{
char a[]="abss";
char c[]="";
strcpy(c,a);
printf("%s",a);
}
爲什麼源串a
變化對使用strcpy()
只有當字符串c
大於或等於串a
檢查?爲什麼調用strcpy()會導致我的源字符串發生更改?
c
具有大小1
但您嘗試將5個字符複製到它。這會導致未定義的行爲。
解釋你所看到的,可能發生的事情是c
和a
是彼此相鄰存儲在內存中,這樣的事情你寫入c
溢出和土地a
。
您沒有足夠的存儲空間來存儲c(只有1個字節的終止符)。
try char c [8] =「」;
您需要爲未分配的目標分配內存。你的情況應該是
char[8] c;
,它應該正常工作
官方的回答:
分配給目標字符串的內存是1個字符,並且源字符串的長度5個字符。所以你正在調用C語言標準的未定義行爲。
實用答案:
分配用於目標字符串存儲爲1個字符,並且源串的長度爲5個字符。您的特定編譯器可能會在內存中的目標字符串之後立即分配源字符串。因此,第一個字符被成功複製到目標字符串中,其餘4個字符被複制到源字符串本身中。
請注意,您還有另一個問題,因爲目標字符串不再以null結尾。
由於'c'不夠長,無法容納5個字符。您定義它的方式只有長度1。 – JS1