[C/C++]printfでNULLを出力するとどうなるか

posted in: C, C++ | 0

遭遇

こんにちは。阿部です。
ある日私は、あるはずのない(null)に出会いました。

あるはずのないnull

ソースコードをgrep検索しても、入出力のログを見ても(null)なんていう文字列は出てこないのに、一体どこから現れたんだろう。

(null)の正体

まあ、タイトル通りなのですが、次のコードを見てください。

nullと出力された

Visual C++ 2010でこれを実行すると、(null)という文字列が出力されて、正常終了します。
Cの規格では未定義の動作なので、何が起きても文句は言えないんですが、意表を突かれました。

ちなみに、私が予想したのは次の三つです。
– ランタイムエラーが発生する
– 空文字列が出力される
– でたらめな文字列が出力される

意図しない(null)を見かけたら、printf, sprintf, fprintfなどにNULLを突っ込んでないかを疑ってみてください。

LINEで送る
Pocket