爲什麼這個代碼導致段錯誤?
char *text = "foo";
strcpy(text, "");
據我的理解,第一行分配一些內存(持有字符串「foo」)和text
指向分配的內存。第二行將一個空字符串複製到text
指向的位置。
此代碼可能沒有多大意義,但它爲什麼會失敗?
爲什麼這個代碼導致段錯誤?
char *text = "foo";
strcpy(text, "");
據我的理解,第一行分配一些內存(持有字符串「foo」)和text
指向分配的內存。第二行將一個空字符串複製到text
指向的位置。
此代碼可能沒有多大意義,但它爲什麼會失敗?
每當你有一個字符串文字(在你的情況下,「foo」),程序將該值存儲在只讀部分內存中。
strcpy
想要修改該值,但它是隻讀的,因此存在分段錯誤。
此外,text
應該是一個const char*
,而不是一個char*
。
因爲字符串文字(如"foo"
)是只讀。
因爲字符串文字存儲在內存的只讀區域。
因此,嘗試修改foo
(在這種情況下使用strcpy
)是未定義的行爲。
看看搜索結果。看他們!@#! http://stackoverflow.com/search?q=strcpy+segmentation+fault – quasiverse
什麼是最好的重複?我無法輕鬆找到它。 – erisco
它們並非全部重複,但錯誤通常是相同的。 – Mysticial