4

関数に関してはprintf、いくつかの参考文献と実験から次のことがわかりました。

  • float (または) double に使用される書式指定子を使用して整数値を出力しようとすると、その逆の動作は予測できません
  • ただし%c、整数値に相当する文字を出力するために使用することは可能です。%d文字の ASCII 値 (整数表現) を表示するためにof を使用することもできます。

同様に、フォーマット指定子と scanf に渡される引数が一致しscanfない場合、 の動作はどうなりますか。規格はそれを定義していますか?

4

1 に答える 1

4

可変個引数 (省略記号 に一致するもの...) はdefault-promotedです。これは、すべての短い整数型が昇格されるint(または必要に応じて符号なし) ことを意味します。整数と文字の間に違いはありません(私は信じています)。%d%cinの違いはprintf、値がどのようにフォーマットされるかだけです。

scanf別の魚のやかんです。渡す引数はすべてポインタです。ポインタ間にデフォルト プロモーションはありません。ポインタの型と一致する正確な書式指定子を渡すことが重要です。

どちらの場合でも、フォーマット指定子が指定された引数と一致しない場合 (たとえば、 in にanint *を渡す)、結果は未定義の動作になり、「予測不能」であるよりもはるかに悪いことになります。これは、プログラムの形式が単に不適切であることを意味します。 .%pprintf

于 2012-10-10T23:40:53.500 に答える