C、toper segmentation fault

C, toupper segmentation fault


    char *s1 = "emma";

    char *s2 = s1;

    s2[0] = toupper(s2[0]);

    printf("%s\n", s2);
    printf("%s\n", s1);

我正在研究指针,但我不太明白为什么我会在这里遇到分段错误。我知道 toupper 函数需要一个字符,但字符串 s2 的第 0 个元素不是一个字符吗?我知道它是一个指针,但它指向一个 char 对吗?这是怎么回事?

i don't quite understand why i'm getting a segmentation error here.

代码试图修改字符串文字。那就是UB。复制一份。

UB:未定义的行为 - 可能有效,可能会以明显或奇怪的方式失败。