MW211 EXIT

devlog
C言語/%sと空文字
2013年05月04日
「printf("%s",…」とかで使う、文字列がはめ込まれる「%s」。
これは、末尾の終端(\0)までを取り込むという仕様なので、
「\0」がない数値項目(int型とか)をぶちこんで例外となる場合がある。
#デバッグログなんかでよくやりがちなミスだ

それじゃ、NULL(\0)入れても大丈夫なんだろ、って早合点して
NULLを直接入れて例外となるのもありがちなミス
#って直接NULL入れる奇特な人は少数かもしれませんが、
  ポインタ変数の絡みで結果的にNULLが入るケースを放置してしまうことは結構ある
┌─┬────────────────────────────────────┐
│×│char*  s = NULL;                                                        │
│  │printf("%s", s);                                                        │
├─┼────────────────────────────────────┤
│○│char*  s = "";                                                          │
│  │printf("%s", s);                                                        │
└─┴────────────────────────────────────┘
「""」を入れるのは大丈夫なんだけどね。
「""」の場合は、ポインタで指したところが「\0」、
「NULL」の場合は、そもそも指すところがない、という違いなのだ。
分類:C/C++