printf("%d");
orprintf("%p");
ステートメントの出力はどうなりますか?
もちろん、printf が引数を期待しているため、引数を渡す必要があることはわかっていますが、これを空のままにしておくとどうなりますか?
これにより、スタックから(関数の引数を配置する必要がある場所から)読み取った値が出力されることがわかっています。Linux マシンを実行していると仮定すると、これが何らかの有効な値 (関数の戻りアドレスなど) になると期待できますか?
これは単に未定義の動作です。なんでも起こる可能性がある。より正確な答えを出すことは不可能です。
詳細はprintf
、ライブラリによる の実装方法と、コンパイラによる可変引数の実装方法によって異なります。ライブラリのソースや生成されたアセンブリを調べて、プラットフォームで何が起こっているかを調べます。
これにより、未定義の動作が発生します。その性質上、これは何が起こるかについて何も想定できないことを意味します。
未定義の動作。つまり、たとえばプログラムがクラッシュする可能性があります。
(C99、7.19.6.1p2) 「フォーマットの引数が不十分な場合、動作は未定義です。」
これは未定義の動作を引き起こします。ランダムな整数またはクラッシュが出力される場合があります...
これが有効な値になると期待できますか? : いいえ。