Q. a[i] = NULL
a[i] = \0
上記のどちらが正解だろうか?
NULL も'\0'もいずれも0をあらわしている。
NULL はアドレスが 0
NULL はマクロ定義 #define NULL ((void *)0)としている。
'\0' は文字コード(ASCIIコード表)が 0 である
文字の'\0':文字コード(ASCII)の番号が 0
A. a[i] = '\0' が正解である。
a[i] = NULL これは値がポインタと数値を比較してしまっている為である。
まとめ
0 整数の 0。
NULL どこも参照していないことを表すポインター(マクロ)。
値はアドレスの0番(値0)。
空文字('\0') ASCIIコード(文字コード)値0(NULL文字)を指す。
空文字列("") 文字'\0'の配列(文字配列)。値はこの配列の先頭アドレスとなる。
整数の0,NULL,空文字('\0')は値がともに0であるため,結果としては混同して使っても問題ないことが多い。
ただし,空文字列は大きく意味が異なる。空文字列は空文字('\0')を要素として持つ要素数1の配列である。そのため,単独の空文字列の値は配列の先頭アドレスとなる。空文字列の先頭要素[0]は空文字('\0')であるため値は0である。