2013-10-25 41 views
1

爲什麼修改預初始化的字符串文字會導致分段錯誤?例如:爲什麼修改字符串文字會導致分段錯誤?

char *str = "Hello world"; 
str[0] = 'h'; 

當初始化str該字符串值,沒有編譯器自動爲字符串常量分配內存,轉讓其起始位置str和自由它在程序退出?

+0

問題是,您不應將字符串文字分配給'char *',它被棄用,並且你的編譯器應該產生一個警告。見:http://stackoverflow.com/questions/13248399/hello-world-string-literal-can-be-assigned-to-char-type – Seth

+0

如果你想讀更多關於這個我會看看在https://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals – jpw

+0

+1好問題 – necromancer

回答

2

它是在進程的地址空間的只讀部分,因爲字符串字面量是一個常數。 (str變量不在只讀空間,但應該使其指向有效的可寫位置,然後才能按照您的方式使用它。)

相關問題