可能重复:
why segmentation fault in this program这种情况下为什么会出现分段错误?
int main()
{
char *a="asdasd";
int i;
for(i=0;i<6;i++)
{
(*a)++;
printf("\n%s",a);
}
}
输出分割故障
int main()
{
char a[]="asdasd";
int i;
for(i=0;i<6;i++)
{
(*a)++;
printf("\n%s",a);
}
}
没有分段故障
第一个程序中的分段错误,因为你很幸运。在第二个程序中没有分段错误,因为你不走运。调用'printf()'(或任何接受可变数量参数的函数)时,如果没有范围原型调用未定义行为。未定义行为的一个表现是分段错误(一种很好的表现形式);另一个是一切正如你期望的那样工作(一个不好的表现)......哦,你也试图在第一个程序中更改一个不可修改的数组:另一个未定义行为的案例 – pmg 2011-04-30 23:18:22
@pmg你能否提供一些关于表现的链接未定义的行为? – bacchus 2011-04-30 23:22:43
@bacchus:http://c2.com/cgi/wiki?UndefinedBehavior – pmg 2011-04-30 23:32:02