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 という。ヌル文字が格納された文字列であるという事だ。