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
?
答案 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值,所以你不能修改它。