当没有足够的参数传递时,printf会做什么?

时间:2017-01-09 22:24:26

标签: c printf undefined-behavior format-specifiers

假设我使用了printf而没有传递足够的参数来匹配格式说明符:

#include <stdio.h>

int main(void) {
    printf("missing argument: %s\n");
}

对结果有什么保证吗?
在我的机器上,什么都没有打印出来。
总是这样,或者是否有可能用解析的说明符打印字符串?

例如: missing argument: %s

或: missing argument:

2 个答案:

答案 0 :(得分:5)

C规范在这一点上是明确的:

  

...如果格式的参数不足,则行为未定义。 ...
   C11dr§7.21.6.12

对结果有什么保证吗? - &GT;否。

(在我的机器上,根本没有打印出任何内容。)总是如此 - &gt;否。

是否有可能使用已解析的说明符打印字符串? - &GT;是。行为未定义。任何事情都可能发生。

答案 1 :(得分:1)

printf reference表示传递的参数少于格式中指定的参数会产生未定义的行为:

  
      
  • 指定要打印的数据的参数。如果任何参数不是相应转换说明符所期望的类型,或者存在   参数少于格式所需的参数,行为未定义。如果   格式要求的参数多于外来的无关   参数被评估和忽略
  •