C输出问题

为什么它的输出是%%?

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

这是未定义的行为,绝对会发生任何事情。 C99的第7.19.6.1/9节规定:

如果转换规范无效,则行为是不确定的。

而前面的部分都没有允许空间的转换说明符。 它们仅限于diouxXfFeEgGaAcsPn%字符。

如果您使用一个% ,则将其视为字符串(因为缺少其他说明符)并输出% 。 如果使用%% ,则在输出中打印% 。 如果您使用%%% ,前两个将被视为输出% ,最后一个被视为单个“字符”。 所以你只得到两个%