如何在C';s printf
在C中使用如何在C';s printf,c,printf,format-string,C,Printf,Format String,在C中使用printf时,如何转义%符号 printf("hello\%"); /* not like this */ 您可以通过如下方式发布双“%”来逃避它:%% 以您的例子: printf("hello%%"); 转义“%”符号仅适用于printf。如果您这样做: char a[5]; strcpy(a, "%%"); printf("This is a's value: %s\n", a); 它将打印:这是a的值:%%自身
printf
时,如何转义%符号
printf("hello\%"); /* not like this */
您可以通过如下方式发布双“%”来逃避它:
%%
以您的例子:
printf("hello%%");
转义“%”符号仅适用于printf。如果您这样做:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
它将打印:这是a的值:%%
自身
printf("hello%%"); /* like this */
使用:
如果字符串中没有格式,可以使用(或): 如果字符串中有格式:
printf("%.2f%%", 53.2);
如注释中所述,
将
附加一个\n
到输出,而fputs
不附加。正如其他人所说,%%将逃逸%
但是,请注意,您不应该这样做:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
每当您必须打印字符串时,总是,总是,总是使用
printf("%s", c)
防止嵌入的%引起问题(内存冲突等)。C中的反斜杠用于转义字符串中的字符。字符串不会将
%
识别为特殊字符,因此不需要转义printf
是另一回事:使用%%
打印一个%%
如下:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
挑剔:在指定函数族的
printf()
(和scanf()
)格式的字符串中,不能真正转义%
函数族中的%
启动转换规范。转换规范的一条规则规定,%
作为转换规范(紧跟在启动转换规范的%
之后)会导致写入'%'
字符而不转换参数
字符串实际上内部有2个
'%'
字符(与转义字符相反:“a\bc”
是一个包含3个非空字符的字符串;“a%%b”
是一个包含4个非空字符的字符串)。是的,请使用printf(“hello%%”)代码>完成。您使用的格式说明符不正确。您应该使用%%
打印%%
。您的代码应该是:
printf("hello%%");
阅读更多。您可以简单地使用%
两次,即“%%”
例如:
printf("You gave me 12.3 %% of profit");
您可以使用%%:
printf("100%%");
结果是:
100%
双精度“%”也适用于“.格式(…)”。
示例(iDrawApertureMask==87,fCornerRadMask==0.05):
csCurrentLine.Format(\%ADD%2d%C,%6.4f*\%”,idrawaperturemack,fCornerRadMask);
给出csCurrentLine中(字符串内容)的期望值和期望值;
%ADD87C,0.0500*%“此警告通常是适当的,但在某些情况下,您可能希望执行此操作。”“-只要您知道您提供的字符串将被解释为格式字符串。我曾经提出过另一种解决方案-将缓冲区复制到另一个缓冲区,然后将%符号加倍。我最终发现了这个想法,用一行替换了一个20-30行的函数。别担心,我确实狠狠地打了自己的头,这是我应得的。做推杆(c)要容易得多。ifput追加一个换行符。这通常是不需要的行为。@Mikeage:如果不需要,请执行fputs(string,stdout)代码>或printf(“%s”,字符串)代码>值得一提的是fputs(),因为它直接返回到fprintf()。put还附加了一个换行符[即使您已经有了一个换行符]。如果你想要的话,太好了。否则…@SinanÜnür:谢谢你提醒我关于put
。我从来没有想过用put
打印字符串,而是直接跳到printf
。不再是了。“printf(“hello%%”)是对的。但我认为这不是一种逃避。使用printf(“hello\045”)@巴勃罗·圣克鲁斯:这种“转义”%
的方法是特定于printf
的,对吗?这是转义系统中非常常见的规则的一个特例,即获取您使用的文字转义符号。赖江山,这行不通\045
是编译时转义,它是语言的一部分,编译时将变成%
printf
是一个运行时函数,因此它处理字符串的字节,而不是C源代码,并且它有自己的转义序列,这些序列是函数的一部分。简而言之,printf
是“语言中的语言”,而printf(“这是a的值:%s\n”,a)代码>给出与打印F相同的结果(“这是a的值:\045\0163\012”,a)
。此外,您还可以执行以下操作:printf(“hello%c”,“%”)代码>。但是,%%
更好,因为它不使用其他参数;特殊字符需要一种方法来“转义”其特殊含义,并恢复其“字符性质”“hello\%”
不起作用,因为它产生字符串hello%
加上NUL,就像“hello%”
一样。“hello\%”
不起作用,因为。。。为了我。。。它不编译。我使用了Microsoft Visual Studio 2017。编译失败,消息为:'%':无法识别的字符转义序列。
printf("You gave me 12.3 %% of profit");
printf("100%%");