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);
文字列を印刷する必要があるときはいつでも、常に、常に、常に次のように使用して文字列を印刷します。
printf("%s", c)
埋め込まれた%が問題を引き起こすのを防ぐために[メモリ違反、セグメンテーション違反など]
それ自体で...
printf("hello%%"); /* like this */
Nitpick:printf()
(およびscanf()
)ファミリーの関数の形式を指定するストリング内の%
を実際にエスケープすることはありません。
printf()
(およびscanf()
)ファミリーの関数に含まれる%
は、変換指定を開始します。変換指定の規則の1つに、変換指定子としての%
(変換指定を開始した%
の直後)を指定すると、引数は変換されずに'%'
文字が書き込まれます。
文字列本当にの中には2つの'%'
文字があります(エスケープ文字とは対照的に、"a\bc"
は3つの非NULL文字を含む文字列、"a%%b"
は4つの非NULL文字を含む文字列です)。
二重の%%を使う
このような:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
Cのバックスラッシュは、文字列内の文字をエスケープするために使用されます。文字列は%を特殊文字として認識しないため、エスケープは必要ありません。 Printfは別の問題です。1%を印刷するには%%を使用してください。
うん、printf( "hello %%")を使ってください。そしてそれは完了です。
あなたは単に%
を二度使うことができます、それは"%%"
です
例:
printf("You gave me 12.3 %% of profit");
あなたは%%を使うことができます:
printf("100%%");
年です。結果:
100%
二重の「%」は、「。Format(…)」でも機能します。例(iDrawApertureMask == 87、fCornerRadMask == 0.05):csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
は(文字列の内容)csCurrentLineの希望値と期待値を示します。 ADD87C、0.0500 *% "