当我尝试修改字符串常量时,为什么会出现分段错误?

0 c string

可能重复:
为什么在写入字符串时会出现分段错误?

我希望这个程序的输出是:ibjgsjfoet但是我得到了一个分段错误.

#include <stdio.h>
int main()
{

    char *p="haifriends",*p1;
    p1=p;
    while(*p!='\0')
    ++*p++;
    printf("%s   %s",p,p1);
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

Mah*_*esh 10

我希望这个程序的输出是:ibjgsjfoet

char *p="haifriends",*p1;
Run Code Online (Sandbox Code Playgroud)

haifriends驻留在内存的只读部分,无法修改.如果您希望修改字符串文字,则必须复制.

char p[]="haifriends",*p1;
p1 = p;
Run Code Online (Sandbox Code Playgroud)


Ned*_*der 7

在同一个声明中使用两个自动增量是一个麻烦.不要试图变得棘手.编写代码,使其清晰,富有表现力,您将获得更好的结果.