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("%%");