char*上的分段错误++运算符

Kar*_*and 0 c segmentation-fault

可能重复:
为什么这个Seg Fault?

在char*上使用++运算符时收到分段错误

#include<stdio.h>

int main()
{
    char *s = "hello";
    printf("%c ", ++(*s));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但如果我做以下事情:

#include<stdio.h>

int main()
{
    char *s = "hello";
    char c = *s;
    printf("%c ", ++c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后代码编译完美,上面的代码有什么问题?

hmj*_*mjd 5

第一个代码片段试图将字符串文字中的字符修改为:

++(*s)
Run Code Online (Sandbox Code Playgroud)

试图增加第一个字符s.字符串文字(通常)是只读的,尝试修改将导致分段错误(C标准状态如果程序试图修改这样的数组,则行为未定义.).

第二个片段正在修改一个char变量,该变量在以下情况下不是只读的:

char c = *s;
Run Code Online (Sandbox Code Playgroud)

c是一个复制的第一个字符的sc可以安全地递增.