为什么输出代码段printf(“%。%。%。”);变成%.0%.0%.0?

时间:2019-09-19 15:09:28

标签: c format printf specifier

我知道句点.可以精确分隔字段宽度。但是,我不知道%之后零将如何变化。每次运行时,它都会显示相同的输出。

代码:

#include <stdio.h>
int main() { printf("%. %. %. "); return 0; }

输出: %.0 %.0 %.0

main.c:13:15: warning: unknown conversion type character 0x20 in format [-Wformat=]                                                                                                         
main.c:13:18: warning: unknown conversion type character 0x20 in format [-Wformat=]                                                                                                         
main.c:13:21: warning: unknown conversion type character 0x20 in format [-Wformat=]                                                                                                         

1 个答案:

答案 0 :(得分:3)

您在%之后没有提供有效的转化说明符(例如dxfgcsp等),因此您正在调用undefined behavior。这意味着任何事情都可能发生。

根据ISO C99标准的7.19.6.1/9:

  

如果转换规范无效,则行为未定义。 239)如果任何参数不是对应转换规范的正确类型,则行为为   未定义。