当尝试访问C中string的字符时出现总线错误

我多次使用这行代码(更新:当string是一个参数的函数!),但是当我尝试做现在我得到一个总线错误(与gcc和铛)。 我正在复制最简单的代码;

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指针更改string的第二个字符?

您正试图修改只读内存(其中存储了字符串文字)。 如果您需要修改该内存,则可以使用char数组。

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

我已经多次使用这行代码

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

当你声明一个指向字符串的指针时,它指向数据段中的只读存储器(如果你喜欢的话,看一下汇编输出)。 将类型声明为char []会将该文字复制到函数的堆栈中,如果需要的话,将允许对其进行修改。