此代码在运行时给我一个分段错误。
char *str = "HELLO";
str[0] = str[2];
请有人告诉我原因吗?
答案 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
部分中,无法写入。