❤恋するコンピュータサイエンス❤

コンピュータサイエンス、3DCGをもっと楽しく、もっと本質的に!c言語、c++の記事中心です

NULLと'\0'と空文字は別物

Q.
a[i]  =  NULL 
a[i] = '\0'
        上記のどちらが正解か?


A. 
a[i] ='\0' が正解である。
  a[i] = NULLこれは値がポインタと数値を比較してしまっている為である。


解説
NULL も\0もいずれも数字の0をあらわしている。

NULL とはアドレスが0
NULL はマクロ定義 #define NULL ((void)*0)としている。

'\0'   は文字コード(ASCIIコード表)の値が0である

まとめ 

0 整数の0。
NULL

どこも参照していないことを表すポインター(マクロ)。

値はアドレスの0番(値0)。

空文字('\0' ASCIIコード(文字コード)値0(NULL文字)を指す。
空文字列("" 文字'\0'の配列(文字配列)。値はこの配列の先頭アドレスとなる。

整数の0,NULL,空文字('\0')は値がともに0であるため,結果としては混同して使っても問題ないことが多い。

ただし,空文字列は大きく意味が異なる。空文字列は空文字('\0')を要素として持つ要素数1の配列である。そのため,単独の空文字列の値は配列の先頭アドレスとなる。空文字列の先頭要素[0]は空文字('\0')であるため値は0である。

空文字列はnull string という。ヌル文字が格納された文字列であるという事だ。