プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。

Oracle 9i Oracle 9i ベリサイン 無料試用版SSL ベリサイン 無料試用版SSL

2005/07/17

【プログラミング】NULLと空文字列

C言語の初心者に多い間違いに、NULLと空文字列の混同がある。

たとえば、こんなコードがある(最近はこんな関数、めっきり使わなくなったけど)。

-----
char drive[_MAX_PATH];
char path[_MAX_PATH];
char fname[_MAX_PATH];
char ename[_MAX_PATH];
_splitpath("C:\HOGE.txt",drive,path,fname, ename):
-----

_splitpathという関数は、取得する drive、path、fname、ename のうち、取得する必要の無いパラメータには、NULLを渡す事ができる。
ファイル名と拡張子だけが欲しい場合、以下の様に記述する。

-----
char fname[_MAX_PATH];
char ename[_MAX_PATH];
_splitpath("C:\HOGE.txt",NULL,NULL,fname, ename):
-----

これを、初心者は以下の様に記述してしまう。

-----
char fname[_MAX_PATH];
char ename[_MAX_PATH];
_splitpath("C:\HOGE.txt","","",fname, ename):
-----

これは明らかに間違いである。
_splitpath に、メモリ領域のポインタが渡ってしまうので、_splitpath は、ドライブ名とパスを引数で渡されたポインタに入れようとし、結果、メモリ領域内が破壊される。

このコードを書いた初心者に「その引数には、NULLを渡さないとダメだよ」と教えても、「だから、ヌルを渡してるじゃないですか」とのたまう。
確かにわかりにくい概念ではあるとは思うが、「ポインタに何が入っているか」を考えれば、_splitpathに「""」を渡したら、関数側の処理で判断できない事くらいわかりそうなもんだ。



このエピソードはいかがでしたか?

投稿者 zunbe : 2005/07/17 01:06:35


コメント

コメントしてください






保存しますか?


スパム対策:
この入力フィールドに「13」と入力してください。


プログラマ ずんべ の日記:ずばヒット アマゾン