字符串文字是常量嗎?如果我將一個(gè)字符串文字分配給a char*,即使使用了許多迂腐選項(xiàng)(-Wall -W -pedantic -std=c99),GCC和Clang都不會(huì)抱怨:char *foo = "bar";而他們(當(dāng)然)不要抱怨,如果我分配const char*到char*。這是否意味著字符串文字被認(rèn)為是char*類型?他們不應(yīng)該const char*嗎?如果它們被修改,它就不是定義的行為!和(一個(gè)不相關(guān)的問(wèn)題)命令行參數(shù)(即:):argv它被認(rèn)為是一個(gè)字符串文字?jǐn)?shù)組?
3 回答

慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
他們是類型的char[N]
地方N
是字符,包括終端的數(shù)量\0
。所以是的,您可以將它們分配給它們char*
,但您仍然無(wú)法寫入它們(效果將是未定義的)。
Wrt argv
:它指向一個(gè)指向字符串的指針數(shù)組。這些字符串是明確可修改的。您可以更改它們,并且需要保留最后存儲(chǔ)的值。

莫回?zé)o
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用-Wwrite-strings
選項(xiàng),您將獲得:
warning: initialization discards qualifiers from pointer target type
無(wú)論選項(xiàng)如何,GCC都會(huì)將文字放入只讀內(nèi)存部分,除非另有說(shuō)明-fwritable-strings
(但是此選項(xiàng)已從最近的GCC版本中刪除)。
命令行參數(shù)不是const,它們通常存在于堆棧中。
- 3 回答
- 0 關(guān)注
- 728 瀏覽
添加回答
舉報(bào)
0/150
提交
取消