C中printf的未定义行为?
Undefined behavior of printf in C?
单个百分号的输出应该是什么?
#include <stdio.h>
void main()
{
printf("%");
}
“未知格式代码”不同于“未知转义序列”。
%
用于表示您要打印变量,例如
int i = 10;
printf("%d", i); //prints 10
为了仅打印“%”符号,您必须将其转义为
printf("%%");
你正在做的是undefined behavior。
C standard 的第 7.21.6.1p9 节关于 fprintf
(以及扩展 printf
)的格式说明符指出:
If a conversion specification is invalid, the behavior is undefined. If any argument is
not the correct type for the corresponding conversion specification, the behavior is
undefined.
此外,如果您这样做,gcc 将生成带有 -Wall
的警告:
warning: spurious trailing ‘%’ in format [-Wformat=]
打印 %
字符的正确方法是使用格式说明符 %%
。
printf("%%");
单个百分号的输出应该是什么?
#include <stdio.h>
void main()
{
printf("%");
}
“未知格式代码”不同于“未知转义序列”。
%
用于表示您要打印变量,例如
int i = 10;
printf("%d", i); //prints 10
为了仅打印“%”符号,您必须将其转义为
printf("%%");
你正在做的是undefined behavior。
C standard 的第 7.21.6.1p9 节关于 fprintf
(以及扩展 printf
)的格式说明符指出:
If a conversion specification is invalid, the behavior is undefined. If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
此外,如果您这样做,gcc 将生成带有 -Wall
的警告:
warning: spurious trailing ‘%’ in format [-Wformat=]
打印 %
字符的正确方法是使用格式说明符 %%
。
printf("%%");