猿问

为什么在此C程序段错误中写入字符串文字?

#include<stdio.h>


void main()

{

    char *p="nyks";


    p[2]='n';


    printf("%s",p);

}

这会因SEGMENTATION FAULT崩溃。有人可以解释为什么吗?


C


jeck猫
浏览 446回答 3
3回答

潇潇雨雨

该标准要求定义文字字符串const。您无法更改。编译器将文字放在只读存储器部分中。您可以输出装配并遵守该要求。如果您使用的是GCC,则通过-s标志完成。它将把字符串放在.rodata节中。

汪汪一只猫

尝试覆盖字符串文字是未定义的行为。C99§6.4.5/ 6:如果程序尝试修改这样的数组,则行为未定义。附录J.2(未定义的行为)中对此进行了重申。如果您改为:char p[] = "nyks";您可以分配和初始化自动(堆栈)字符数组。在这种情况下,修改元素就很好了。
随时随地看视频慕课网APP
我要回答