私が置く場合:
#define SIZE 10
以降:
scanf("%SIZEs", s);
実行時エラーが発生しました。SIZE
プリプロセッサはコンパイルする前に置き換える必要10
があるため、これは(私の意見では)次のように書く必要があります
scanf("%10s", s);
それで、どこが間違っていますか?
私が置く場合:
#define SIZE 10
以降:
scanf("%SIZEs", s);
実行時エラーが発生しました。SIZE
プリプロセッサはコンパイルする前に置き換える必要10
があるため、これは(私の意見では)次のように書く必要があります
scanf("%10s", s);
それで、どこが間違っていますか?
あなたのコードでは、問題は
scanf("%SIZEs", s);
" "
フォーマット文字列 (一般に文字列リテラル)の引用符の間にあるものは、MACRO 置換によって置換されません。
したがって、前処理後、 (または、全体として) 1 つの無効な書式指定子であるため、 scanf()
書かれたままのままであり、未定義の動作になり、エラーが発生します。%S
%SIZEs
次のように回避策を試すことができます
scanf("%"SIZE"s", s);
このようにSIZE
して、引用符の外側になり、前処理段階で置換が考慮されます。