我通过汇编代码使用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使用期望找到一个参数?为什么有任何印刷品都没有参数?
答案 0 :(得分:6)
原因是格式说明符告诉printf应该收到多少个参数。 Printf从堆栈中获取数据;如果你没有为它提供任何数据,那么它将把所有发生在堆栈上的东西都当作一个参数。
答案 1 :(得分:3)
标准说
如果
printf()
中的格式说明符数大于参数数,则行为未定义。
未定义的行为意味着可以发生任何。