我曾经多次使用这行代码(更新:当字符串是函数参数时!),但是现在尝试这么做时,我遇到了总线错误(无论是使用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 str[] = "This is a string";
str[0] = 'S'; /* works */
我已经多次使用了这行代码...
-Wwrite-strings
,它会通过将字符串设置为const char []
来警告您更改字面字符串的行为。请注意,标准说字面字符串是char[]
(实际上是“只读char[]”),但使它们成为常量会使您的编译器(更)不符合标准。 - pmg