2011-03-04 77 views
0

以下代碼會在我的系統上產生段錯誤。我無法弄清楚爲什麼。任何幫助,將不勝感激。在c中修改char指針的值會產生段錯誤

#include<stdio.h> 
int main() { 
    char * a = "abc"; 
    *a = 'c'; 
    printf("%c\n", *a); 
    return 0; 
} 
+0

我不相信它是最早的一個,但這裏有一個重複:http://stackoverflow.com/q/943191/2509 – dmckee 2011-03-04 07:15:38

回答

2

試圖修改字符串文字會導致未定義的行爲。

+0

有沒有什麼辦法在C修改字符串文字?必須有。 – 2011-03-04 04:49:27

+2

@Smoke,不,沒有。您需要將文字複製到不在只讀內存中的數組中。 – 2011-03-04 04:50:39

+0

謝謝,這是有道理的。 – 2011-03-04 04:53:19

6

標準中明確列出了§J.2這是不確定的行爲:

- 該程序試圖修改 字符串字面量(6.4.5)

如果你想複製它變成一個本地數組,這樣做:

char a[] = "abc"; 

a是在棧上的數組,你可以自由地修改它。