为什么%在C中打印一半?

时间:2016-08-25 13:49:34

标签: c format-specifiers

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

对于上述程序,输出为%%。但为什么? (我使用gcc编译器。)

2 个答案:

答案 0 :(得分:5)

使用无效的格式说明符调用

未定义的行为

N1570 7.21.6.1 fprintf函数在%转换说明符的说明中说明:

  

完整的转换规范应为%%。

N1570 4.一致性说:

  

如果违反约束或运行时约束之外的''shall''或''shall not''要求,则行为未定义。

%转换说明符的描述位于“描述”部分,不是约束,也不是运行时约束部分。

在实际实现中,系统的行为如下所示:

  1. 首先阅读%并开始解析说明符
  2. 阅读并将其另存为国旗
  3. 阅读第二个%并将其视为%转化说明符
  4. 之后阅读并打印它,因为它不是说明符
  5. 的一部分
  6. 阅读% %并按照1-3
  7. 的方式工作

答案 1 :(得分:2)

这很有趣。不知何故%%计为%%,呵呵。必须在stdio库中的printf格式的解析规则中。通常,“%”并不完全是有效的格式规范。 %% %% %% %%可以满足您的需求。