1

printf("%d");orprintf("%p");ステートメントの出力はどうなりますか?

もちろん、printf が引数を期待しているため、引数を渡す必要があることはわかっていますが、これを空のままにしておくとどうなりますか?

これにより、スタックから(関数の引数を配置する必要がある場所から)読み取った値が出力されることがわかっています。Linux マシンを実行していると仮定すると、これが何らかの有効な値 (関数の戻りアドレスなど) になると期待できますか?

4

5 に答える 5

6

これは単に未定義の動作です。なんでも起こる可能性がある。より正確な答えを出すことは不可能です。

詳細はprintf、ライブラリによる の実装方法と、コンパイラによる可変引数の実装方法によって異なります。ライブラリのソースや生成されたアセンブリを調べて、プラットフォームで何が起こっているかを調べます

于 2012-10-24T11:58:04.317 に答える
2

これにより、未定義の動作が発生します。その性質上、これは何が起こるかについて何も想定できないことを意味します。

于 2012-10-24T11:57:54.927 に答える
1

未定義の動作。つまり、たとえばプログラムがクラッシュする可能性があります。

(C99、7.19.6.1p2) 「フォーマットの引数が不十分な場合、動作は未定義です。」

于 2012-10-24T12:20:03.910 に答える
1

これは未定義の動作を引き起こします。ランダムな整数またはクラッシュが出力される場合があります...

于 2012-10-24T11:55:42.210 に答える
0

これが有効な値になると期待できますか? : いいえ。

于 2012-10-24T11:59:47.333 に答える