C 当传递的参数不足时,printf将做什么?
假设我使用了C 当传递的参数不足时,printf将做什么?,c,printf,undefined-behavior,format-specifiers,C,Printf,Undefined Behavior,Format Specifiers,假设我使用了printf,但没有传递足够的参数来匹配格式说明符: #include <stdio.h> int main(void) { printf("missing argument: %s\n"); } #包括 内部主(空){ printf(“缺少参数:%s\n”); } 对结果有什么保证吗? 在我的机器上,根本无法打印任何内容。 是否总是这样,或者是否有可能使用解析的说明符打印字符串 例如: 缺少参数:%s 或: 缺少参数:C规范在这一点上是明确的: 。。。如果
printf
,但没有传递足够的参数来匹配格式说明符:
#include <stdio.h>
int main(void) {
printf("missing argument: %s\n");
}
#包括
内部主(空){
printf(“缺少参数:%s\n”);
}
对结果有什么保证吗?在我的机器上,根本无法打印任何内容。
是否总是这样,或者是否有可能使用解析的说明符打印字符串 例如:
缺少参数:%s
或:
缺少参数:
C规范在这一点上是明确的:
。。。如果格式参数不足,则行为未定义C11dr§7.21.6.1 2 对结果有什么保证吗?-->没有 (在我的机器上,根本不会打印任何内容。)总是这样吗-->否 是否有可能使用解析的说明符打印字符串?-->对该行为未定义。任何事情都可能发生。指出,传递的参数少于格式中指定的参数会产生未定义的行为:
- 指定要打印的数据的参数。如果任何参数不是相应转换说明符所期望的类型,或者 参数少于格式要求的参数,行为未定义。如果 这里的参数比格式要求的要多,这是无关的 参数将被计算并忽略
该行为将是未定义的。它是UB,因此对于它将执行的操作没有标准。编译器可能会发出警告,但一般来说,格式字符串在编译时是未知的。考虑<代码> PrimTf(s,1, 2);<代码>显然你不是第一个进入这个周期的人@尤金尼什。那么为什么不把CV作为dup呢?