为什么以下会产生分段错误?

时间:2010-11-20 03:13:11

标签: c const segmentation-fault

int main()
{
        char *temp = "Paras";

        int i;
        i=0;

        temp[3]='F';

        for (i =0 ; i < 5 ; i++ )
                printf("%c\n", temp[i]);

        return 0;
}

为什么temp[3]='F';会导致细分错误,因为temp不是const

4 个答案:

答案 0 :(得分:9)

不允许修改字符串文字。

答案 1 :(得分:0)

* temp被定义为指向常量的指针(有时称为字符串文字 - 特别是在其他语言中)。

因此,带错误的行正在尝试更改此常量的第三个字符。

尝试定义一个char数组并使用strcpy将temp复制到其中。然后在数组上执行上面的代码,它应该工作。 (对不起,我的ipad不喜欢在SO的界面中插入代码)

答案 2 :(得分:0)

如您所见,temp是一个指针,指向一个随机地址,其中值为Paras的无名数组所在的地址。那个数组是一个字符串常量。

要使程序正常工作,您需要使用数组而不是指针:

char temp[6] = "Paras";

现在,如果你想知道为什么它是temp[6]而不是temp[5],那么上面的代码会初始化一个字符串,并且完全不同于:

char temp[5] = {'P', 'a', 'r', 'a', 's'};

使用空终止符\0终止字符串。字符串初始化将如下:

char temp[6] = {'P', 'a', 'r', 'a', 's', '\0'};

答案 3 :(得分:0)

  temp[3]='F'; 

这一行不正确。“temp”是const值,所以你不能修改它。