假设我使用了printf
而没有传递足够的参数来匹配格式说明符:
#include <stdio.h>
int main(void) {
printf("missing argument: %s\n");
}
对结果有什么保证吗?
在我的机器上,什么都没有打印出来。
总是这样,或者是否有可能用解析的说明符打印字符串?
例如:
missing argument: %s
或:
missing argument:
答案 0 :(得分:5)
C规范在这一点上是明确的:
...如果格式的参数不足,则行为未定义。 ...
C11dr§7.21.6.12
对结果有什么保证吗? - &GT;否。
(在我的机器上,根本没有打印出任何内容。)总是如此 - &gt;否。
是否有可能使用已解析的说明符打印字符串? - &GT;是。行为未定义。任何事情都可能发生。
答案 1 :(得分:1)
printf reference表示传递的参数少于格式中指定的参数会产生未定义的行为:
- 指定要打印的数据的参数。如果任何参数不是相应转换说明符所期望的类型,或者存在 参数少于格式所需的参数,行为未定义。如果 格式要求的参数多于外来的无关 参数被评估和忽略