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

4
这段代码在运行时出现了分割错误。
char *str = "HELLO";
str[0] = str[2];

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


谁在点赞这个?这不是一个坏问题,但是 StackExchange 将会达到一个检测这个问题并能够将用户指向 C-FAQ 的点。 - cnicutar
4个回答

7

您不能修改字符串字面量的内容。如果您想对其进行修改,请将其放入字符数组中。

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

7

你遇到了段错误,因为编译器将字符串常量“HELLO”放置在只读内存中,尝试修改字符串因此失败。


4

这将编译为只读区域中的字符串文字。

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

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接