预增量运算符和取消引用运算符导致分段错误,似乎无法理解为什么

Pre increment operator and dereference operator resulting in segmentation fault, can't seem to understand why

在要求计算输出的测试中找到了以下代码。

#include <stdio.h>

int gate(char *P)
{
    char *q = P;
    q++;
    *q++;
    ++*q;
    return(q-P);
}


int main()
{
    char *s = "gateexam";
    int x = gate(s);
    printf("%d",x);
}

运行 它在在线编译器上,但由于某种原因它由于行 "++*q" 而导致分段错误(注释掉这一行使程序 运行 正常).

不明白是什么原因造成的

screenshot of code and output

Can't understand what is causing this

代码中的错误导致了此问题。此程序试图修改字符串文字,这是语言规则所禁止的。

你可以这样修复:

int main()
{
    char s[] = "gateexam";
...