c – 修改指针指向的字符串是否有效?

这是一个连接两个字符串的程序的简单示例.

#include <stdio.h>

void strcat(char *s, char *t);

void strcat(char *s, char *t) {
    while (*s++ != '\0');
    s--;
    while ((*s++ = *t++) != '\0');
}

int main() {
    char *s = "hello";
    strcat(s, " world");
    while (*s != '\0') {
        putchar(*s++);
    }
    return 0;
}

我想知道为什么它有效.在main()中,我有一个指向字符串“hello”的指针.根据K& R书,修改这样的字符串是未定义的行为.那么为什么该程序能够通过附加“世界”来修改它?或者是否附加不被视为修改?

未定义的行为意味着编译器可以发出执行任何操作的代码.工作是未定义的子集.
https://stackoverflow.com/questions/604391/is-modifying-a-string-pointed-to-by-a-pointer-valid

转载注明原文:c – 修改指针指向的字符串是否有效?