-4

给定以下 C 程序,

#include <stdio.h>

int main() 
{ 
    printf(" \"Books %% OR %% apparels\""); 
    getchar(); 
    return 0; 
}

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

4

1 回答 1

5

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

因此,您必须对其进行转义才能打印%字符。

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


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

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

有两个转义序列printf()

  1. "% O"

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

  2. "% a"

    printf()将尝试float参数列表中获取 a 并将其打印为“十六进制浮点,小写”(%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
于 2013-09-24T17:26:54.720 回答