3

私が置く場合:

#define SIZE 10

以降:

scanf("%SIZEs", s);

実行時エラーが発生しました。SIZEプリプロセッサはコンパイルする前に置き換える必要10があるため、これは(私の意見では)次のように書く必要があります

scanf("%10s", s);

それで、どこが間違っていますか?

4

3 に答える 3

2

あなたのコードでは、問題は

  scanf("%SIZEs", s);

" "フォーマット文字列 (一般に文字列リテラル)の引用符の間にあるものは、MACRO 置換によって置換されません。

したがって、前処理後、 (または、全体として) 1 つの無効な書式指定子であるため、 scanf()書かれたままのままであり、未定義の動作になり、エラーが発生します。%S%SIZEs

次のように回避策を試すことができます

 scanf("%"SIZE"s", s);

このようにSIZEして、引用符の外側になり、前処理段階で置換が考慮されます。

于 2015-07-15T15:26:14.270 に答える