2011-05-27 117 views
3

此代碼在運行時給我一個分段錯誤。嘗試修改字符串時出現分段錯誤

char *str = "HELLO"; 
str[0] = str[2]; 

請誰能告訴我爲什麼?

+0

這是誰upvoting?不是一個壞問題,但stackexchange將達到它將檢測到這個問題,並能夠指出用戶在c-faq。 – cnicutar 2011-05-27 08:11:51

回答

3

標準不允許修改字符串文字。該字符串存儲在程序的只讀段中,例如在linux中,它存儲在可執行文件的.rodata部分,該部分無法寫入。

7

您不能修改字符串文字的內容。如果你希望能夠這樣做,把它放在字符數組中。

char str[] = "HELLO"; 
str[0] = str[2]; 
7

你得到一個賽格故障,因爲編譯器已經把字符串常量「HELLO」到只讀存儲器 - 並試圖修改這樣的字符串失敗。

4

這被編譯爲只讀部分的字符串文字。

 .section  .rodata 
.LC0: 
     .string "HELLO" 
相關問題