为什么省略printf打印垃圾的参数?

时间:2011-11-17 08:43:31

标签: c assembly x86 printf

我通过汇编代码使用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使用期望找到一个参数?为什么有任何印刷品都没有参数?

2 个答案:

答案 0 :(得分:6)

原因是格式说明符告诉printf应该收到多少个参数。 Printf从堆栈中获取数据;如果你没有为它提供任何数据,那么它将把所有发生在堆栈上的东西都当作一个参数。

答案 1 :(得分:3)

标准说

  

如果printf()中的格式说明符数大于参数数,则行为未定义。

未定义的行为意味着可以发生任何

相关问题