誤って scanf() 関数の 2 番目のパラメーターを省略した場合、プログラムは引き続きコンパイルおよび実行されましたが、実行可能ファイルで次のエラーが発生しました。例外コード「c0000005」を含む「APPCRASH」(これは、メモリ アクセス違反が発生したことを意味します)。 )。私はいくつかの実験を行いましたが、scanf() を呼び出す関数が範囲外になるとクラッシュが常に発生するように見えましたが、実際の呼び出しで発生することが多いことに気付きました。例:
void afunction (void) {
printf("This works fine!");
scanf("%c"); /* NOTE the second parameter omission */
printf("This showed up a few times, misleading me");
}
3 つの質問があります。
1) コンパイラがコードのコンパイルに失敗しないのはなぜですか? それは私に警告さえしません!
2) scanf() は現在、メモリアドレス NULL に書き込もうとしていますか? 例: scanf("%c", NULL)
3) 失敗した scanf() ステートメントの下の何かが実行できたのはなぜですか?
追加情報:
プラットフォーム: Windows
コンパイラ: GCC
IDE: Code::Blocks