可能重複:
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