[英]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.