Answers:
您可以这样发布一个双'%'来对其进行转义: %%
使用您的示例:
printf("hello%%");
转义'%'符号仅适用于printf。如果您这样做:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
它将打印: This is a's value: %%
%
方法特定于printf
,对吗?
\045
是编译时转义,它是语言的一部分,%
在编译时会转化为转义。printf
是一个运行时函数,因此它处理字符串的字节而不是C源代码,并且它具有自己的转义序列,这些序列是函数的一部分。简而言之,printf
是“一种语言内部的语言”,printf("This is a's value: %s\n", a);
其结果与相同printf("This is a's value: \045\0163\012", a);
。
printf("hello%c", '%');
。但是,%%
最好不要使用其他参数。
正如其他人所说,%%将逃脱%。
但是请注意,您永远不要这样做:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
每当您必须打印字符串时,始终,始终,始终使用
printf("%s", c)
防止嵌入式%引起问题[内存违规,段错误等]
Nitpick:
您实际上并没有%
在为printf()
(和scanf()
)函数族指定格式的字符串中转义。
的%
,在printf()
(和scanf()
)系列函数,启动转换规范。转换规范的规则之一指出,%
作为转换说明符(紧随%
转换规范开始之后的)导致在'%'
不转换任何参数的情况下写入字符。
该字符串实际上包含2个'%'
字符(与转义字符相反:"a\bc"
是具有3个非空字符"a%%b"
的字符串;是具有4个非空字符的字符串)。