char s[100]={0};
fgets(s, sizeof(s), stdin);
上記のコードのコンテキストでは、これら 3 つの違いは何ですか?
printf("%s",s);
printf(s);
fputs(s,stdout);
printf("%s",s);
正しいですが、printf は非常に重い関数であり、フォーマット文字列が '\n' で終わる場合、ほとんどのコンパイラは実際にはコンパイラ コード内の puts に置き換えます。
printf; フォーマット文字列に含まれている可能性が%
あり、別のパラメーターが必要になるため、非常に危険です。それが起こるなら、それはUBです。また、コードが悪用されやすくなります
fputs(s,stdout); わかった。printf ほど重くはありませんが、新しい行を追加します
他のコメントや回答で述べたように、2 番目のオプションは試さないでください。また、3本目は1本目よりかなり軽いです。
ただし、最初のオプション (printf()
関数) を使用すると、書式設定された文字列を使用できるため、この関数を使用してほとんどすべてのデータ型を出力できますが、関数fputs
は文字列のみを受け入れます。したがって、ほとんどの場合、文字列をsprintf()
関数に渡す前に、最初に (おそらく を使用して)文字列をフォーマットする必要があります。