Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C';s printf_C_Printf_Format String - Fatal编程技术网

如何在C';s printf

如何在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的值:%%自身

在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("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%%");