printf()
文档说,如果有人想用 C 打印,%
他可以使用:
printf("%%")
为什么不是:
printf("\%")
和其他特殊字符一样?
printf()
文档说,如果有人想用 C 打印,%
他可以使用:
printf("%%")
为什么不是:
printf("\%")
和其他特殊字符一样?
反斜杠在解释程序的源文本时由编译器处理。所以常见的结果是源文本"\%"
生成一个包含“%”的字符串。
格式字符串由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("\\%");
因为%
由printf
. 它不是 C 中的特殊字符,但printf
它本身对它的处理方式不同。
约定是特殊字符自行转义。因此,它不是使用反斜杠来转义百分比,而是自行转义。(请注意,要将反斜杠传递给printf
,您必须将字符串文字写为"\\%"
。)
你能行的 !!!!!
#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");
你说的对。一个好处