考虑到C中的以下程序,
#include <stdio.h>
int main()
{
printf(" \"Books %% OR %% apparels\"");
getchar();
return 0;
}
该程序打印书籍%OR%服装, 我想知道%%的重要性,因为它看起来没必要。
答案 0 :(得分:3)
%
表示格式转义序列,用于格式化传递给printf()
的变量。
所以你必须逃避它才能打印%
字符。
http://en.cppreference.com/w/c/io/fprintf
如果您将%%
替换为%
,就像这样
#include <stdio.h>
int main (int argc, char *argv[]) {
printf(" \"Books % OR % apparels\"");
return 0;
}
printf()
有两个转义序列:
"% O"
[guesswork]这不会产生有效的转义序列,因此printf()
忽略它并按原样打印。
"% a"
printf()
会尝试从空参数列表中获取float
并将其打印为“十六进制浮点,小写”(%a
,请参阅上面的网页)。由于C调用约定(免责声明:我不是这方面的专家),使用了一些来自内存的垃圾,这解释了结果。
实际上我的编译器(gcc 4.4.3)向两者发出了警告:
$ gcc a.c
a.c: In function ‘main’:
a.c:3: warning: unknown conversion type character ‘O’ in format
a.c:3: warning: too few arguments for format