2012-05-31 134 views

回答

3

因爲字符串文字abc實際上存儲在進程的只讀區域中,所以不應該修改它。操作系統已將相應的頁面標記爲只讀,並且您在嘗試寫入時遇到運行時異常。

每當你一個字符串分配給char指針,始終有資格作爲const使編譯器警告你這樣的問題:

const char *c = "abc"; 
*c = 'd'; // the compiler will complain 

如果你真的想修改一個字符串(雖然不能直接本身,而是它的拷貝),我會建議使用strdup

char *c = strdup("abc"); 
*c = 'd'; // c is a copy of the literal and is stored on the heap 
... 
free(c); 
+0

「char *'指針」將是一個char **。 –

+0

@Samuel:正確:-) –

1

​​是一個字符串文字。

*c = 'd'是嘗試修改該字符串文字。

您不能修改字符串文字。

+0

請注意,在某些平臺上,您可以修改字符串文字。 –

+0

@WilliamPursell:試圖修改字符串文字會導致未定義的行爲。即使它不會在某個平臺上崩潰,也會導致其他錯誤(例如更改不同的字符串)。 – interjay

+0

@WilliamPursell:如果你想讓你的程序展現出定義好的行爲,你就不能這樣做。 –

相關問題