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