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");
你说的对。一个好处