2016-08-12 1 views

答えて

3

TL; DR%printf()の有効な変換指定あります。 C11を引用

、変換指定子のための章§7.21.6.1、

各変換指定は文字%によって導入されます。 %後、以下の が順番に表示されます。

.....

- 適用する変換の種類を指定する変換指定子文字。

と、段落8から、として%変換指定文字

ため%変換指定用

%%文字が書かれています。引数は変換されません。完全な 変換仕様は、%%とする。

コードには%%のペアがあります。

0

Printfファンクションの最初の引数は、char*で表されるformatです。文字列ではありません。

だから、intを印刷する場合は、"%d"と書く必要があります。あなたが唯一のフォーマットとして%を書く場合、それは%(D、P、X、S、F、...のいずれか)の後に何かを待っているので、そう%は特殊文字で、コンパイラは幸せではありません。

ただし、%%と書くと、「1つはエスケープされた%を印刷します」という意味です。あなたは正確にあなたが与えるものを表示する関数をしたい場合、あなたはwriteを使用することができます:

char* mystr = "%%%%"; 
write(STDOUT_FILENO, mystr, strlen(mystr)); 
+0

'Printf関数の最初の引数は、char *で表される形式ですが、文字列ではありません。' ..あなたは精巧にできますか? –

+1

「%は特殊文字です」..技術的には、変換指定子の_開始を示します。 –

+0

つまり、printfが呼び出されると、 'char *'は直接書き込まれず、前処理されているので、charの特殊シーケンスがすべて置き換えられます。例えば、 '%s'はchar * – Omar

関連する問題