C-中的字符串是char*str,真的等同于char str []吗?

job*_*obi 1 c

可能重复:
char*str ="STRING"和char str [] ="STRING"之间的区别?
需要一些C编程方面的帮助

而这个剪辑会导致分段错误

int main(void) {

    char*  str ="abcde";
    str[strlen(str)-1] ='\0';
    printf("%s",str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我把char str [] ="abcde";指针放在 完美的指针上,你知道为什么会这样吗?

Fle*_*exo 8

在编写时,char *str = "abcde";您创建一个char指向字符串文字的指针,您不能修改它.

当你编写时,char str[] = "abcde";你创建一个char数组并将字符串文字复制到其中.这只是一个普通的char数组,因此您可以自由修改它.

修改字符串文字是未定义的行为.这是一个深思熟虑的设计决策,允许将字符串文字放在输出程序的特殊只读部分中.在实践中,许多编译器和平台都这样做(将其标记为只读意味着您只需要在内存中只有一个字符串副本,即使程序运行的实例不止一个).这会导致您在平台上观察到的行为.