這段代碼拋出賽格fault.Please幫我鑑定相同爲什麼這個代碼片段給分段錯誤
#include<stdio.h>
int main() {
char* str;
str = "abcd";
str[0] = 'r';
printf("%c\n" , str[0]);
return 0;
}
感謝
這段代碼拋出賽格fault.Please幫我鑑定相同爲什麼這個代碼片段給分段錯誤
#include<stdio.h>
int main() {
char* str;
str = "abcd";
str[0] = 'r';
printf("%c\n" , str[0]);
return 0;
}
感謝
井C FAQ 1.32解釋了原因。修改字符串文字是非法的。
6.4.5/6
它是unspeci音響ED這些陣列是否是不同的條件是它們的 元素具有適當的值。如果該程序嘗試 修改這樣一個數組,行爲是不確定的。
str = "abcd";
str[0] = 'r';
這種嘗試修改字符串文字。官方,這是未定義的行爲。然而,在大多數現代系統中,存儲器存儲字符串文字將被標記爲只讀,因此試圖修改它們會導致錯誤。
這類似於Question有關分段錯誤
請參閱此獲取更多信息。
感謝您對此進行了詳細的說明和解答,C FAQ絕對是一個寶藏 – Rajan