1
爲什麼修改預初始化的字符串文字會導致分段錯誤?例如:爲什麼修改字符串文字會導致分段錯誤?
char *str = "Hello world";
str[0] = 'h';
當初始化str
該字符串值,沒有編譯器自動爲字符串常量分配內存,轉讓其起始位置str
和自由它在程序退出?
爲什麼修改預初始化的字符串文字會導致分段錯誤?例如:爲什麼修改字符串文字會導致分段錯誤?
char *str = "Hello world";
str[0] = 'h';
當初始化str
該字符串值,沒有編譯器自動爲字符串常量分配內存,轉讓其起始位置str
和自由它在程序退出?
它是在進程的地址空間的只讀部分,因爲字符串字面量是一個常數。 (str
變量不在只讀空間,但應該使其指向有效的可寫位置,然後才能按照您的方式使用它。)
問題是,您不應將字符串文字分配給'char *',它被棄用,並且你的編譯器應該產生一個警告。見:http://stackoverflow.com/questions/13248399/hello-world-string-literal-can-be-assigned-to-char-type – Seth
如果你想讀更多關於這個我會看看在https://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals – jpw
+1好問題 – necromancer