遭遇
こんにちは。阿部です。
ある日私は、あるはずのない(null)
に出会いました。
ソースコードをgrep検索しても、入出力のログを見ても(null)
なんていう文字列は出てこないのに、一体どこから現れたんだろう。
(null)の正体
まあ、タイトル通りなのですが、次のコードを見てください。
1
2
|
char* str = NULL; // おっと間違えてNULLを入れてしまったよ
printf("%s", str);
|
Visual C++ 2010でこれを実行すると、(null)
という文字列が出力されて、正常終了します。
Cの規格では未定義の動作なので、何が起きても文句は言えないんですが、意表を突かれました。
ちなみに、私が予想したのは次の三つです。
– ランタイムエラーが発生する
– 空文字列が出力される
– でたらめな文字列が出力される
意図しない(null)
を見かけたら、printf
, sprintf
, fprintf
などにNULLを突っ込んでないかを疑ってみてください。