爲什麼此代碼會產生錯誤?它不應該輸出zbcde嗎?打印字符串意外錯誤
int main()
{
char *p="abcde";
*p='z';
printf("%s\n",p);
return 0;
}
爲什麼此代碼會產生錯誤?它不應該輸出zbcde嗎?打印字符串意外錯誤
int main()
{
char *p="abcde";
*p='z';
printf("%s\n",p);
return 0;
}
你試圖修改字符串文本;這是未定義的行爲。
進一步說明:「abcde」不是char *
而是const char *
。你應該做以下解決方案之一:
char p[] = "abcde";
或
char *p = strdup("abcde");
(在後一種情況下,不要忘記釋放()p!)
char *p="abcde";
- 這將保持字符串abcde
作爲只讀數據,並將地址保存在本地指針變量p
中。
*p = 'z'
將嘗試將只讀數據a
替換爲z
。這是一個未定義的行爲,可能導致崩潰。
因此,將字符串聲明爲本地char數組變量,如下所示。
char p[] = "abcde"
因此,分配動態內存保持字符串如下。
char *p = strdup("abcde");
...
free(p);