当传递的参数不足时,printf 会做什么?
What will printf do when not enough arguments are passed?
假设我使用了 printf
而没有传递足够的参数来匹配格式说明符:
#include <stdio.h>
int main(void) {
printf("missing argument: %s\n");
}
是否可以保证结果是什么?
在我的机器上,什么也打印不出来。
情况是否总是如此,或者它是否有可能使用已解析的说明符打印字符串?
例如:
missing argument: %s
或:
missing argument:
C 规范在这一点上是明确的:
... If there are insufficient arguments for the format, the behavior is undefined. ...
C11dr §7.21.6.1 2
是否可以保证结果是什么? --> 没有。
(在我的机器上,根本没有打印任何东西。)总是这样吗 --> 没有。
它是否有可能打印带有已解析说明符的字符串? --> 是的。行为未定义。任何事情都可能发生。
printf reference 声明传递的参数少于格式中指定的参数会产生未定义的行为:
- arguments specifying data to print. If any argument is not the type expected by the corresponding conversion specifier, or if there are
fewer arguments than required by format, the behavior is undefined. If
there are more arguments than required by format, the extraneous
arguments are evaluated and ignored
假设我使用了 printf
而没有传递足够的参数来匹配格式说明符:
#include <stdio.h>
int main(void) {
printf("missing argument: %s\n");
}
是否可以保证结果是什么?
在我的机器上,什么也打印不出来。
情况是否总是如此,或者它是否有可能使用已解析的说明符打印字符串?
例如:
missing argument: %s
或:
missing argument:
C 规范在这一点上是明确的:
... If there are insufficient arguments for the format, the behavior is undefined. ...
C11dr §7.21.6.1 2
是否可以保证结果是什么? --> 没有。
(在我的机器上,根本没有打印任何东西。)总是这样吗 --> 没有。
它是否有可能打印带有已解析说明符的字符串? --> 是的。行为未定义。任何事情都可能发生。
printf reference 声明传递的参数少于格式中指定的参数会产生未定义的行为:
- arguments specifying data to print. If any argument is not the type expected by the corresponding conversion specifier, or if there are fewer arguments than required by format, the behavior is undefined. If there are more arguments than required by format, the extraneous arguments are evaluated and ignored