这段代码在运行时出现了分割错误。
char *str = "HELLO";
str[0] = str[2];
请问有人能告诉我为什么吗?
char *str = "HELLO";
str[0] = str[2];
请问有人能告诉我为什么吗?
您不能修改字符串字面量的内容。如果您想对其进行修改,请将其放入字符数组中。
char str[] = "HELLO";
str[0] = str[2];
你遇到了段错误,因为编译器将字符串常量“HELLO”放置在只读内存中,尝试修改字符串因此失败。
这将编译为只读区域中的字符串文字。
.section .rodata
.LC0:
.string "HELLO"
标准不允许修改字符串常量。该字符串存储在程序的只读段中,例如在Linux中,它存储在可执行文件的.rodata
部分,无法进行写操作。