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

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

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

你可以通过发布一个像这样的双重'%'来逃避它: %%

用你的例子:

 printf("hello%%"); 

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

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

它会打印: This is a's value: %%

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

但是,请注意,你不应该这样做:

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

无论何时必须打印string,始终始终使用打印string

 printf("%s", c) 

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

如果string中没有格式,则可以使用puts (或fputs ):

 puts("hello%"); 

如果string中有一个格式:

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

正如在评论中指出的那样, puts\n附加到输出,而fputs不会。

本身…

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

使用双%%

鸡蛋里挑骨头:
您并不真正转义指定printf() (和scanf() )函数族格式的string中的%

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

这个string里面真的有2个'%'字符(而不是转义字符: "a\bc"是一个有3个非空字符的string; "a%%b"是一个有4个非空字符的string)。

喜欢这个:

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

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

是的,使用printf(“你好%%”); 它完成了。

您可以简单地使用%两次,即"%%"

例:

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

您可以使用 %%:

 printf("100%%"); 

结果是:

100%

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

 printf("hello%%"); 

阅读更多C中使用的所有格式说明符 。

双“%”也适用于“.Format(…)。例子(使用iDrawApertureMask == 87,fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;给出了csCurrentLine(“%ADD87C,0.0500 *%”)中的string内容的期望值

用这个:

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

与printf一起使用的格式说明符的完整列表可以在这里find:

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