回答:
次のようにダブル '%'をポストすることでエスケープできます: %%
あなたの例を使用して:
printf("hello%%");
'%'記号のエスケープはprintf専用です。もし、するなら:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
印刷されます: This is a's value: %%
%
はに固有のprintf
ものですか?
\045
一部であり、コンパイル時に変換されるコンパイル時エスケープです。はランタイム関数であるため、Cソースコードではなく、文字列のバイトを処理し、関数の一部である独自のエスケープシーケンスを持っています。つまり、は「言語内の言語」であり、と同じ結果になります。%
printf
printf
printf("This is a's value: %s\n", a);
printf("This is a's value: \045\0163\012", a);
printf("hello%c", '%');
。ただし、%%
別の引数を使用しないため、より優れています。
他の人が言ったように、%%は%をエスケープします。
ただし、これは絶対に行わないでください。
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
文字列を印刷する必要があるときはいつでも、常に、常に、常にそれを使用して印刷します
printf("%s", c)
埋め込まれた%が問題を引き起こすのを防ぐため[メモリ違反、segfaultなど]
文字列にフォーマットがない場合は、puts
(またはfputs
)を使用できます。
puts("hello%");
文字列にフォーマットがある場合:
printf("%.2f%%", 53.2);
コメントに記載されてputs
いる\n
ように、出力にa を追加し、追加fputs
しません。
puts
。puts
文字列を出力することを考えたことがなく、すぐににジャンプしましたprintf
。もう違います。
それ自体と...
printf("hello%%"); /* like this */
Nitpick:関数の(および)ファミリの形式を指定する文字列で、を
実際にエスケープすることはありません。%
printf()
scanf()
(及び機能の)ファミリー、変換仕様を開始します。変換指定の規則の1つは、変換指定子としての(変換指定を開始したの直後に続く)により、変換された引数なしで文字が書き込まれることを示しています。%
printf()
scanf()
%
%
'%'
文字列の内部には実際に2 '%'
文字あります(エスケープ文字とは異なり"a\bc"
、3つのnull以外の文字を含む"a%%b"
文字列、4つのnull以外の文字を含む文字列です)。
Cのバックスラッシュは、文字列内の文字をエスケープするために使用されます。文字列は%を特殊文字として認識しないため、エスケープは必要ありません。Printfは別の問題です。%%を使用して1つの%を印刷します。
単純に%
2回使用できます。"%%"
例:
printf("You gave me 12.3 %% of profit");