Chr*_*_45 266 c printf format-string
printf在C中使用时,如何逃避%符号?
printf("hello\%"); /* not like this */
Run Code Online (Sandbox Code Playgroud)
Pab*_*ruz 406
您可以通过发布双重'%'来逃避它: %%
使用你的例子:
printf("hello%%");
Run Code Online (Sandbox Code Playgroud)
转义'%'符号仅适用于printf.如果你这样做:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Run Code Online (Sandbox Code Playgroud)
它将打印: This is a's value: %%
Mik*_*age 36
正如其他人所说,%%将逃脱%.
但请注意,您永远不应该这样做:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Run Code Online (Sandbox Code Playgroud)
每当您必须打印字符串时,始终始终始终使用它进行打印
printf("%s", c)
Run Code Online (Sandbox Code Playgroud)
防止嵌入的%导致问题[内存违规,段错误等]
Sin*_*nür 31
puts("hello%");
Run Code Online (Sandbox Code Playgroud)
如果字符串中有格式:
printf("%.2f%%", 53.2);
Run Code Online (Sandbox Code Playgroud)
如评论中所述,puts将a附加\n到输出而fputs不是.
Nitpick:
你并没有真正逃避%指定printf()(和scanf())函数族格式的字符串.
的%,在printf()(和scanf())系列函数,启动转换规范.转换规范的规则之一规定,%作为转换说明符(紧接%在转换规范开始之后)会导致'%'写入一个字符而不转换参数.
字符串内部确实有2个'%'字符(与转义字符相反:"a\bc"是一个包含3个非空字符"a%%b"的字符串; 是一个包含4个非空字符的字符串).
像这样:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
Run Code Online (Sandbox Code Playgroud)
您使用的格式说明符不正确。您应该%%用于打印%。你的代码应该是:
printf("hello%%");
Run Code Online (Sandbox Code Playgroud)
阅读更多C 中使用的所有格式说明符。