[英]Why the following will produce 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
会导致分段错误?
您不能修改字符串文字。
* temp被定义为指向常量的指针(有时称为字符串文字 - 特别是在其他语言中)。
因此,带错误的行正在尝试更改此常量的第三个字符。
尝试定义一个char数组并使用strcpy将temp复制到其中。 然后在数组上执行上面的代码,它应该工作。 (对不起,我的ipad在这里不喜欢将代码插入SO的界面)
如您所见, temp
是一个指针,指向一个随机地址,其中值为Paras
的无名数组所在的地址。 那个数组是一个字符串常量。
要使程序正常工作,您需要使用数组而不是指针:
char temp[6] = "Paras";
现在,如果你想知道为什么它是temp[6]
而不是temp[5]
,上面的代码初始化一个字符串,完全不同于:
char temp[5] = {'P', 'a', 'r', 'a', 's'};
字符串以null终止符\\0
终止。 字符串初始化将如下:
char temp[6] = {'P', 'a', 'r', 'a', 's', '\0'};
temp[3]='F';
这行不正确。“temp”是const值,所以你不能修改它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.