2011-05-27 115 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" 
相关问题