为什么printf只接受多个“%”?

时间:2016-08-12 06:31:36

标签: c printf format-specifiers

以下程序给出输出%%。为什么呢?

#include <stdio.h>

int main() {
    //code
    printf("%%%%");
    return 0;
}

输出:

  

%%

2 个答案:

答案 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));
相关问题