【发布时间】:2013-12-14 17:37:41
【问题描述】:
我尝试使用反斜杠转义它。
#include <stdio.h>
int main(void) {
printf("\%");
return 1;
}
但它不起作用。正确的语法是什么?
【问题讨论】:
我尝试使用反斜杠转义它。
#include <stdio.h>
int main(void) {
printf("\%");
return 1;
}
但它不起作用。正确的语法是什么?
【问题讨论】:
printf("%%");
【讨论】:
printf 如何处理格式说明符有关。转义对所有字符串都有效,并且在编译时完成。格式说明符(百分号)仅由某些函数使用并在运行时使用。如果您将write 转换为stdout,则无需使用双百分号。
puts 可能是一个更好的例子:它只是将给定的字符串打印到stdout 而不对其进行任何处理。
printf("\%");
如果您在 C89 模式下编译它,将打印 %(在 K&R C 中,它是行为定义)。
在 C99/11 中这是无效的。
双引号
"和问号?可以单独表示,也可以分别用转义序列\"和\?表示,但单引号'和反斜杠@987654330 @ 应分别由转义序列\'和\\表示。
确认没有像\%这样的转义序列。
首选方式是
printf("%%");
question 与 answered here 几乎相似。
【讨论】:
printf("\%") 是有效的K&R C 吗?当然,字符串常量本身是有效的,并且与"%" 相同,但我很确定,对printf 的调用不是,因为"%" 不是有效的格式说明符(至少在C99 中,使用无效格式规范的行为未定义 (C99 §7.19.6.1(9))。但很遗憾,我这里没有 K&R 书来验证这一点。