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