21

printf()文档说,如果有人想用 C 打印,%他可以使用:

printf("%%")

为什么不是:

printf("\%")

和其他特殊字符一样?

4

4 回答 4

38

反斜杠在解释程序的源文本时由编译器处理。所以常见的结果是源文本"\%"生成一个包含“%”的字符串。

格式字符串由printf例程解释,因此它处理传递给它的字符。到这个时候,反斜杠不再存在,所以printf永远不会看到它。

从技术上讲,\%在字符串文字中是不合法的。字符\开始一个转义序列,唯一合法的转义序列在 C 2011 6.4.4.4 1 中列出。它们\后面是', ", ?, \, a, b, f, n, r, t, v, 1 到 3 个八进制数字x和 16 进制数字,u以及 4 个十六进制数字,或U八个十六进制数字。

如果printf设计为反斜杠会转义百分比,那么您必须通过转义源文本中的反斜杠来传递反斜杠,因此您必须编写:

printf("\\%");
于 2013-07-23T13:28:44.320 回答
30

因为%printf. 它不是 C 中的特殊字符,但printf它本身对它的处理方式不同。

于 2013-07-23T13:27:51.107 回答
4

约定是特殊字符自行转义。因此,它不是使用反斜杠来转义百分比,而是自行转义。(请注意,要将反斜杠传递给printf,您必须将字符串文字写为"\\%"。)

于 2013-07-23T13:30:24.167 回答
0

你能行的 !!!!!

#include <iostream>
#include <string>
#include "stdio.h"
using namespace std;



int main(int argc, char **argv)
{


    printf("hhhhhhh %s \n","\%");
    printf("hhhhhhh  \n");

    return 0;
}

printf 存在问题,并且与您使用的编译器不同.. 使用 wxWidget lib,您不能使用带有两个转义序列的 printf

printf(" xxxxxx  \0x81  xx \0x82 xx \n");

不要去。但是如果你使用

printf(" xxxxxx  %s  xx %s \n","\0x81","\0x82"); 

你说的对。一个好处

于 2015-09-06T09:50:11.797 回答