0
char s[100]={0};
fgets(s, sizeof(s), stdin);

上記のコードのコンテキストでは、これら 3 つの違いは何ですか?

  1. printf("%s",s);
  2. printf(s);
  3. fputs(s,stdout);
4

3 に答える 3

3
  1. printf("%s",s);正しいですが、printf は非常に重い関数であり、フォーマット文字列が '\n' で終わる場合、ほとんどのコンパイラは実際にはコンパイラ コード内の puts に置き換えます。

  2. printf; フォーマット文字列に含まれている可能性が%あり、別のパラメーターが必要になるため、非常に危険です。それが起こるなら、それはUBです。また、コードが悪用されやすくなります

  3. fputs(s,stdout); わかった。printf ほど重くはありませんが、新しい行を追加します

于 2019-02-04T09:15:11.270 に答える
0

他のコメントや回答で述べたように、2 番目のオプションは試さないでください。また、3本目は1本目よりかなり軽いです。

ただし、最初のオプション (printf()関数) を使用すると、書式設定された文字列を使用できるため、この関数を使用してほとんどすべてのデータ型を出力できますが、関数fputsは文字列のみを受け入れます。したがって、ほとんどの場合、文字列をsprintf()関数に渡す前に、最初に (おそらく を使用して)文字列をフォーマットする必要があります。

于 2019-02-04T09:53:53.457 に答える