printf()
文档说如果有人想在C中打印%
,他可以使用:
printf("%%")
为什么不是:
printf("\%")
与其他特殊字符一样吗?
答案 0 :(得分:38)
在解释程序的源文本时,编译器会处理反斜杠。因此,常见的结果是源文本"\%"
生成一个包含“%”的字符串。
格式字符串由printf
例程解释,因此它处理传递给它的字符。到这时,反斜杠不再存在,因此printf
永远不会看到它。
从技术上讲,\%
在字符串文字中是不合法的。字符\
启动转义序列,唯一的合法转义序列列在C 2011 6.4.4.4中。它们是\
后跟'
,"
,{ {1}},?
,\
,a
,b
,f
,n
,r
,{{1 ,一到三个八进制数字,t
和十六进制数字,v
和四个十六进制数字,或x
和八个十六进制数字。
如果u
被设计成反斜杠会逃逸一个百分比,那么你必须通过转义源文本中的反斜杠来传递一个反斜杠,所以你必须写:
U
答案 1 :(得分:29)
因为%
由printf
处理。它不是C中的特殊字符,但printf
本身对待它的方式不同。
答案 2 :(得分:4)
惯例是特殊角色逃避自己。因此,它不是使用反斜杠来逃避百分比,而是逃脱了自己。 (请注意,要将反斜杠传递给printf
,您必须将字符串文字写为"\\%"
。)
答案 3 :(得分: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");
你是对的。加号