C言語のprintfにおける%(パーセント)記号をエスケープするには?

StackOverflow https://stackoverflow.com/questions/1860159

  •  13-09-2019
  •  | 
  •  

質問

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)

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

何の形式が文字列内に存在しない場合は、使用することができます puts (または fputs の)

puts("hello%");

文字列の形式がある場合:

printf("%.2f%%", 53.2);
コメント欄で述べたように、

putsを出力する\nを付加しfputsはない。

自体に...

printf("hello%%"); /* like this */

Nitpick:
あなたは本当に機能の%(およびprintf())家族のためのフォーマットを指定する文字列でscanf()をエスケープしないでください。

%は、機能のprintf()(及びscanf())ファミリーで、変換仕様を開始します。変換仕様のためのルールの一つは、(すぐに変換指定を開始した%以下)の変換指定子として%'%'文字が変換引数なしで書き込ませることを述べています。

の実際の(文字のエスケープとは対照的に:'%' 3つの以外のヌル文字を含む文字列である。"a\bc" 4つの以外のヌル文字を含む文字列である)内の2つの"a%%b"文字を有している。

ダブル%%を使用する

このよう

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

Cでのバックスラッシュは文字列内の文字をエスケープするために使用されます。文字列は特殊文字として%を認識しないので、逃げ場は必要ではないだろう。 printfのは別の問題です:百分の一を印刷するには%%を使用

うん、使用のprintf( "ハロー%%")。そしてそれが行われます。

あなたは単に%二回使用することができ、それは"%%"である

例:

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

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

printf("100%%");

結果は次のとおりです。

  

100%

あなたは%%を印刷するため%を使用する必要があり、誤った書式指定子を使用しています。あなたのコードは次のようになります。

printf("hello%%");  

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

二重の '%'「は.Format(...)にも動作します。 (iDrawApertureMaskの== 87、fCornerRadMaskの== 0.05を有する)の例: csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; csCurrentLine(文字列の内容)の所望の期待値を与えます。     "%のADD87C、0.0500 *%"

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top