簡體   English   中英

為什么省略對printf的參數會打印垃圾?

[英]Why does omitting an argument to printf print garbage?

我通過匯編代碼使用printf。 我注意到在下面的示例中,如果我省略了預期的參數,則會輸出垃圾。

    .386
    .model flat, c
    .stack 100h
printf PROTO arg1:Ptr Byte, printlist:VARARG
    .data
msg3fmt byte 0Ah,"%s",0Ah,"test output",0Ah,0
    .code
main proc
    INVOKE printf, ADDR msg3fmt
    ret
main endp
    end

我的問題是為什么? 是否有一個設置內存地址,printf期望用於查找自變量? 由於沒有傳遞任何參數,為什么要打印任何內容?

原因是格式說明符告訴printf應該接收多少個參數。 Printf從堆棧中獲取數據; 如果您不為其提供任何數據,則它將拉出堆棧中的所有內容並將其作為參數。

標准說

如果printf()中格式說明符的數量大於參數的數量,則行為未定義。

未定義的行為意味着任何事情都可能發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM