以下程序给出输出%%
。为什么呢?
#include <stdio.h>
int main() {
//code
printf("%%%%");
return 0;
}
输出:
%%
答案 0 :(得分:3)
TL; DR a %
是printf()
的有效转化说明符。
引用C11
,章节§7.21.6.1,转换说明符,
每个转换规范都由字符
%
引入。在%
之后,以下内容 按顺序出现:.....
- 一个转换说明符字符,用于指定要应用的转化类型。
,并且,从第8段开始,%
为 转换说明符字符
用于%
转换说明符
%
写一个%
字符。没有参数被转换。完整的 转换规范应为%%
。
您的代码有一对%%
s。
答案 1 :(得分:0)
Printf
函数的第一个参数是由format
表示的char*
,它不是字符串。
这就是打印int
的原因,例如,你必须写"%d"
。所以%
是一个特殊的字符,如果你只写%
作为格式,编译器将不会高兴,因为它等待%
之后的某些东西(d,p,x ,s,f,...)。
但是,通过撰写%%
,这意味着“打印一个转义%”。这就是%%%%
打印%%
编辑:如果您想要一个能够准确打印您所提供内容的功能,您可以使用write
:
char* mystr = "%%%%";
write(STDOUT_FILENO, mystr, strlen(mystr));