尝试修改字符串时出现分段错误

此代码在运行时给出了分段错误。

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

请有人能告诉我为什么吗?

Standard不允许修改字符串文字。 该字符串存储在程序的只读段中,例如在linux中,它存储在可执行文件的.rodata部分中,该部分无法写入。

您无法修改字符串文字的内容。 如果您希望能够将它放在字符数组中。

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

你得到一个seg-fault,因为编译器已经将字符串常量“HELLO”放入只读内存中 – 并且尝试修改字符串因此失败。

这在只读部分编译为字符串文字。

  .section .rodata .LC0: .string "HELLO"