web-dev-qa-db-ja.com

Cのprintfの%(パーセント)記号をエスケープする方法は?

Cでprintfを使うとき、どうやって%記号をエスケープしますか?

printf("hello\%"); /* not like this */
254
Chris_45

このように二重の '%'を投稿することでそれをエスケープすることができます:%%

あなたの例を使用して:

printf("hello%%");

エスケープ '%'記号はprintf専用です。もしあなたがそうするなら:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

印刷されます:This is a's value: %%

385

他の人が言っているように、%%は%から逃げます。

ただし、絶対にしないでください。

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

文字列を印刷する必要があるときはいつでも、常に、常に、常に次のように使用して文字列を印刷します。

printf("%s", c)

埋め込まれた%が問題を引き起こすのを防ぐために[メモリ違反、セグメンテーション違反など]

34
Mikeage

文字列にフォーマットがない場合は、 puts (または fputs )を使用できます。

puts("hello%");

文字列にフォーマットがある場合:

printf("%.2f%%", 53.2);

コメントで述べたように、putsは出力に\nを追加し、fputsは追加しません。

29
Sinan Ünür

それ自体で...

printf("hello%%"); /* like this */
9
martin clayton

Nitpick:
printf()(およびscanf())ファミリーの関数の形式を指定するストリング内の%を実際にエスケープすることはありません。

printf()(およびscanf())ファミリーの関数に含まれる%は、変換指定を開始します。変換指定の規則の1つに、変換指定子としての%(変換指定を開始した%の直後)を指定すると、引数は変換されずに'%'文字が書き込まれます。

文字列本当にの中には2つの'%'文字があります(エスケープ文字とは対照的に、"a\bc"は3つの非NULL文字を含む文字列、"a%%b"は4つの非NULL文字を含む文字列です)。

7
pmg

二重の%%を使う

6
jldupont

このような:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
4
Salman A

Cのバックスラッシュは、文字列内の文字をエスケープするために使用されます。文字列は%を特殊文字として認識しないため、エスケープは必要ありません。 Printfは別の問題です。1%を印刷するには%%を使用してください。

3

うん、printf( "hello %%")を使ってください。そしてそれは完了です。

2
Kevin

%%を印刷するには%を使用する必要があります。あなたのコードは次のようになります。

printf("hello%%");  

続きを読む Cで使用されているすべてのフォーマット指定子

2
Pankaj Prakash

あなたは単に%を二度使うことができます、それは"%%"です

例:

printf("You gave me 12.3 %% of profit");
2
Md Shahriar

あなたは%%を使うことができます:

printf("100%%");

年です。結果:

100%

2
Donald Duck

二重の「%」は、「。Format(…)」でも機能します。例(iDrawApertureMask == 87、fCornerRadMask == 0.05):csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;は(文字列の内容)csCurrentLineの希望値と期待値を示します。 ADD87C、0.0500 *% "

0
dindea