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

时间:2011-05-27 07:17:08

标签: c

此代码在运行时给我一个分段错误。

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

请有人告诉我原因吗?

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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