我已经使用过这行代码很多次了(更新:当字符串是函数的参数时!),但是当我尝试这样做时,我遇到了总线错误(包括gcc和clang)。我正在复制最简单的代码;

char *string = "this is a string";
char *p = string;
p++;
*p='x'; //this line will cause the Bus error
printf("string is %s\n",string);

为什么我不能使用p指针更改字符串的第二个字符?

最佳答案

您正在尝试修改只读内存(存储字符串文字的位置)。如果需要修改该内存,则可以改用char数组。

char str[] = "This is a string";
str[0] = 'S'; /* works */



我当然希望不会。充其量您会遇到段错误(我说“充其量”是因为尝试修改只读内存是未指定的行为,在这种情况下,任何事情都可能发生,而崩溃是最好的事情)。

当声明一个指向字符串文字的指针时,它指向只读数据段中的内存(如果愿意,请查看程序集输出)。将您的类型声明为char []会将该文字复制到函数的堆栈中,这又将允许在需要时对其进行修改。

10-04 21:54
查看更多