1

私はこのコードを見つけました.printfには1つのパラメータしかありません.そして、それは機能します! printf について私が知っているのは、 printf("format",...); だけです。しかし、なぜこのコードが機能するのでしょうか? どんな答えでも役に立ちます。ありがとう。

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5         char a[]= "hello world";
  6         printf(a);
  7         return 0;
  8 }
~           
4

4 に答える 4

2

aフォーマットです。しかし、この種の使い方は非常に危険です。なぜなら、多くの人がそれaがフォーマットであることを忘れ、代わりにリテラル文字列だと思っているからです。違いは、aたまたま が含まれている場合%、書式指定子として解釈されますが、 to 指定子に使用する引数がないことです。

を使用して単一のメッセージ文字列を出力するprintf場合は、代わりに常に次のようにする必要があります。

printf("%s", a);

またはputs、必要に応じて使用してください。

于 2013-08-03T01:48:27.640 に答える
0

int printf ( const char * format, ... );

format必須の引数と、 で表されるリストまたは 0 個以上の要素であるリスト引数を持つ関数です...

したがって、必要な引数のみを指定して をprintf(a);呼び出すだけです。printf()

于 2013-08-03T05:12:24.520 に答える
0

printfパラメータの可変リストを持つ関数です。最初のパラメーターは、フォーマットの詳細を見つけるために解析される文字列です。あなたが示した例では、書式設定の詳細はありません(で始まるフィールド%)。したがって、出力するパラメーターはこれ以上なく、コードは機能します。

于 2013-08-03T01:50:27.797 に答える
0

aは、書式指定子を含まない書式文字列として扱われています。

通常、printf()フォーマット文字列をスキャンし、フォーマット指定子ではないものを出力します。指定子に遭遇すると、それをデコードし、可変引数リストから引数を取得し、指定子に従ってフォーマットして出力し、文字列の末尾に到達するまで同様のループを続けます。

aフォーマット指定子を含まないためprintf()、可変引数リストから引数を取りません。

一般的に言えば、printf()この方法で任意の文字列を出力するために使用すべきではありません。プログラムが文字列のみを出力している場合は、fputs()代わりに次を使用できます。

fputs(a, stdout);
于 2013-08-03T01:47:38.507 に答える