次のプログラムは出力%%
を与えます。どうして?なぜ複数の "%"だけがprintfによって受け入れられますか?
#include <stdio.h>
int main() {
//code
printf("%%%%");
return 0;
}
出力:
%%
次のプログラムは出力%%
を与えます。どうして?なぜ複数の "%"だけがprintfによって受け入れられますか?
#include <stdio.h>
int main() {
//code
printf("%%%%");
return 0;
}
出力:
%%
TL; DR%
はprintf()
の有効な変換指定あります。 C11
を引用
、変換指定子のための章§7.21.6.1、
各変換指定は文字
%
によって導入されます。%
後、以下の が順番に表示されます。.....
- 適用する変換の種類を指定する変換指定子文字。
と、段落8から、として%
変換指定文字
ため%
変換指定用
%
%
文字が書かれています。引数は変換されません。完全な 変換仕様は、%%
とする。
コードには%%
のペアがあります。
Printf
ファンクションの最初の引数は、char*
で表されるformat
です。文字列ではありません。
だから、int
を印刷する場合は、"%d"
と書く必要があります。あなたが唯一のフォーマットとして%
を書く場合、それは%
(D、P、X、S、F、...のいずれか)の後に何かを待っているので、そう%
は特殊文字で、コンパイラは幸せではありません。
ただし、%%
と書くと、「1つはエスケープされた%を印刷します」という意味です。あなたは正確にあなたが与えるものを表示する関数をしたい場合、あなたはwrite
を使用することができます:
char* mystr = "%%%%";
write(STDOUT_FILENO, mystr, strlen(mystr));
'Printf関数の最初の引数は、char *で表される形式ですが、文字列ではありません。' ..あなたは精巧にできますか? –
「%は特殊文字です」..技術的には、変換指定子の_開始を示します。 –
つまり、printfが呼び出されると、 'char *'は直接書き込まれず、前処理されているので、charの特殊シーケンスがすべて置き換えられます。例えば、 '%s'はchar * – Omar
これまでのあなたの研究/デバッグ努力をご提示ください
%%%%
プリント%%
EDITが理由です。まず[Ask]ページをお読みください。 –