3 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果用錯(cuò)誤的格式字符串調(diào)用printf會(huì)發(fā)生什么?
什么都可能發(fā)生。這是未定義的行為!
未定義的行為意味著任何事情都可能發(fā)生。它可能會(huì)向您顯示預(yù)期的結(jié)果,也可能不會(huì),或者可能導(dǎo)致崩潰。任何事情都有可能發(fā)生,您只能怪自己,不要怪自己。
參考:
c99標(biāo)準(zhǔn):7.19.6.1:
第9段:
如果轉(zhuǎn)換規(guī)范無(wú)效,則行為未定義。225)如果任何參數(shù)都不是對(duì)應(yīng)coverage規(guī)范的正確類型,則行為未定義。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
哦,是的-printf取決于格式字符串,以確定接下來(lái)要獲取的變量的大小和類型。當(dāng)格式字符串錯(cuò)誤時(shí),它可能會(huì)嘗試獲取一個(gè)甚至不存在的變量,從而可能產(chǎn)生所有后果。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是未定義的行為-規(guī)范中沒(méi)有任何內(nèi)容告訴編譯器設(shè)計(jì)器(或C庫(kù)設(shè)計(jì)器)應(yīng)如何處理,因此允許他們執(zhí)行任何操作。
在實(shí)踐中,完全取決于數(shù)字的解釋是其中之一,最有可能的是,這樣做絕對(duì)不會(huì)給您帶來(lái)任何好處。真正糟糕的是,當(dāng)您將字符串與整數(shù)格式混合時(shí)-字符串會(huì)很好地打印為(奇怪的,也許是)數(shù)字,但是當(dāng)數(shù)字作為字符串傳遞時(shí),數(shù)字不太可能“起作用”-因?yàn)樽址侵赶虻谝粋€(gè)地址的指針字符-大多數(shù)數(shù)字在典型系統(tǒng)中不是有效的指針,因此會(huì)崩潰。
但是,沒(méi)有任何保證。在您的64位示例中,很明顯該數(shù)字是“ little endian”。嘗試使用0x100000000進(jìn)行同樣的操作,它會(huì)顯示0-因?yàn)槠溆嗟臄?shù)字都會(huì)丟失。
- 3 回答
- 0 關(guān)注
- 606 瀏覽
添加回答
舉報(bào)