printf 中 %% 的作用是什么?

Van*_*ana -2 c io

给定以下 C 语言程序,

#include <stdio.h>

int main() 
{ 
    printf(" \"Books %% OR %% apparels\""); 
    getchar(); 
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

该程序打印书籍% OR % 服装,我想知道%% 的意义,因为它看起来没有必要。

lee*_*sei 7

%表示用于格式化传递给 的变量的格式转义序列printf()

\n\n

所以你必须转义它才能打印%字符。

\n\n

http://en.cppreference.com/w/c/io/fprintf

\n\n
\n\n

如果你替换%%to %,像这样

\n\n
#include <stdio.h>\nint main (int argc, char *argv[]) {\n    printf(" \\"Books % OR % apparels\\"");\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

有两个转义序列printf()

\n\n
    \n
  1. "% O"

    \n\n

    [猜测] 这不会产生有效的转义序列,因此printf()忽略它并按原样打印它。

  2. \n
  3. "% a"

    \n\n

    printf()将尝试float参数列表中获取 a 并将其打印为“十六进制浮点数,小写”(%a,请参阅上面的网页)。由于 C 调用约定(免责声明:我不是这方面的专家),使用了内存中的一些垃圾,这解释了结果。

  4. \n
\n\n

实际上我的编译器(gcc 4.4.3)向两者发出了警告:

\n\n
$ gcc a.c\na.c: In function \xe2\x80\x98main\xe2\x80\x99:\na.c:3: warning: unknown conversion type character \xe2\x80\x98O\xe2\x80\x99 in format\na.c:3: warning: too few arguments for format\n
Run Code Online (Sandbox Code Playgroud)\n