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
?爲什麼以下會產生分段錯誤?
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的接口)
我知道這種感覺。我認爲SO開發者應該考慮iPad用戶的未來。 – 2010-11-20 03:37:17
正如你所看到的,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'};
更好的是,'char temp [] =',所以編譯器會計算出長度。 – 2010-11-20 03:33:36
temp[3]='F';
這行不correct.The「溫度」是常量的值,所以你不能修改它。
因爲您的C/OS實現非常慷慨,並且在調用未定義的行爲時立即終止程序,而不是在您的鼻子上召喚惡魔力量。 – 2010-11-20 03:43:17