3 回答

TA貢獻1830條經驗 獲得超9個贊
如果用錯誤的格式字符串調用printf會發生什么?
什么都可能發生。這是未定義的行為!
未定義的行為意味著任何事情都可能發生。它可能會向您顯示預期的結果,也可能不會,或者可能導致崩潰。任何事情都有可能發生,您只能怪自己,不要怪自己。
參考:
c99標準:7.19.6.1:
第9段:
如果轉換規范無效,則行為未定義。225)如果任何參數都不是對應coverage規范的正確類型,則行為未定義。

TA貢獻1799條經驗 獲得超9個贊
哦,是的-printf取決于格式字符串,以確定接下來要獲取的變量的大小和類型。當格式字符串錯誤時,它可能會嘗試獲取一個甚至不存在的變量,從而可能產生所有后果。

TA貢獻1831條經驗 獲得超9個贊
這是未定義的行為-規范中沒有任何內容告訴編譯器設計器(或C庫設計器)應如何處理,因此允許他們執行任何操作。
在實踐中,完全取決于數字的解釋是其中之一,最有可能的是,這樣做絕對不會給您帶來任何好處。真正糟糕的是,當您將字符串與整數格式混合時-字符串會很好地打印為(奇怪的,也許是)數字,但是當數字作為字符串傳遞時,數字不太可能“起作用”-因為字符串是指向第一個地址的指針字符-大多數數字在典型系統中不是有效的指針,因此會崩潰。
但是,沒有任何保證。在您的64位示例中,很明顯該數字是“ little endian”。嘗試使用0x100000000進行同樣的操作,它會顯示0-因為其余的數字都會丟失。
- 3 回答
- 0 關注
- 618 瀏覽
添加回答
舉報