如何逃避C的printf中的%(百分号)符号?

时间:2009-12-07 14:02:08

标签: c printf format-string

在C中使用printf时,如何逃避%号?

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

14 个答案:

答案 0 :(得分:380)

您可以通过发布双重'%'来逃避它:%%

使用您的示例:

printf("hello%%");

转义'%'符号仅适用于printf。如果你这样做:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

将打印:This is a's value: %%

答案 1 :(得分:34)

正如其他人所说,%%将逃脱%。

但请注意,您绝不应该这样做:

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

每当您必须打印字符串时,始终始终使用

进行打印
printf("%s", c)

防止嵌入的%导致问题[内存违规,段错误等]

答案 2 :(得分:29)

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

puts("hello%");

如果字符串中有格式:

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

如评论中所述,puts会在输出中附加\nfputs则不会。

答案 3 :(得分:9)

自己......

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

答案 4 :(得分:7)

挑剔:
您并没有真正转义指定%(和printf())函数系列格式的字符串中的scanf()

%(和printf())系列函数中的scanf()启动转换规范。转换规范的规则之一规定,%作为转换说明符(紧跟在启动转换规范的%之后)会导致写入'%'字符而不转换参数。

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

答案 5 :(得分:6)

使用双%%

答案 6 :(得分:4)

像这样:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together

答案 7 :(得分:3)

C中的反斜杠用于转义字符串中的字符。字符串不会将%识别为特殊字符,因此不需要转义。 Printf是另一回事:使用%%打印一个%。

答案 8 :(得分:2)

是的,使用printf(“hello %%”);它已经完成了。

答案 9 :(得分:2)

您使用的格式说明符不正确,应使用%%打印%。你的代码应该是:

printf("hello%%");  

了解更多all format specifiers used in C

答案 10 :(得分:2)

您只需使用%两次,即"%%"

示例:

printf("You gave me 12.3 %% of profit");

答案 11 :(得分:2)

您可以使用%%:

printf("100%%");

结果是:

  

100%

答案 12 :(得分:0)

双倍'%'也适用于" .Format(...)。 示例(使用iDrawApertureMask == 87,fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; 给出(字符串内容)csCurrentLine的期望值和期望值;     "%ADD87C,0.0500 *%"

答案 13 :(得分:-5)

使用此:

#include <stdio.h>
printf("hello%s%s");

可以在此处找到与printf一起使用的格式说明符的完整列表:

http://www.mekong.net/tech/printf.htm