在C中使用printf时如何转义%符号?

printf("hello\%"); /* not like this */

当前回答

正如其他人所说,%%将转义%。

然而,请注意,你永远不应该这样做:

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

当你需要打印字符串时,总是,总是,总是使用

printf("%s", c)

防止嵌入的%引起问题(内存违规,分段错误等)。

其他回答

如果字符串中没有格式,你可以使用puts(或fputs):

puts("hello%");

如果字符串中有格式:

printf("%.2f%%", 53.2);

正如注释中所指出的,puts将一个\n附加到输出,而fputs则不会。

使用双%%:

printf("hello%%");

你可以使用%%:

printf("100%%");

结果是:

100%

是的,使用printf("hello%%");做完了。

吹毛求疵: 在指定printf()(和scanf())函数族格式的字符串中,实际上不需要转义%。

printf()(和scanf())函数族中的%开始一个转换规范。转换规范的规则之一规定,%作为转换说明符(紧跟在开始转换规范的%之后)会导致写入'%'字符时不转换参数。

字符串实际上有2个'%'字符(与转义字符相反:"a\bc"是一个包含3个非空字符的字符串;"a%%b"是一个包含4个非空字符的字符串)。