如何逃避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: