Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当传递的参数不足时,printf将做什么?_C_Printf_Undefined Behavior_Format Specifiers - Fatal编程技术网

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呢?