Q.
空文字 '\0' (ヌル文字をシングルクォーテーションではさむ)
空文字列 "" (ダブルクォーテーションのみ)
の違いを説明せよ。
A.
空文字 ('\0')ASCIIコードの0番目の値(ヌル文字)。
空文字列("")文字'\0'が格納されている配列。
凡人: 空文字と空文字列って何が違うの?
恋するコンピュータサイエンス: いい質問だね。空文字、つまり '\0'
はASCIIコードの0番目、ヌル文字を表すんだ。これは文字列の終端を示すのに使われるよ。一方、空文字列 ""
は、実際にはヌル文字 '\0'
が格納されている配列なんだ。
凡人: つまり、空文字列には実際に何か入っているってこと?
恋するコンピュータサイエンス: その通り!空文字列は要素数1の配列で、その唯一の要素が空文字、つまりヌル文字なんだ。だから、空文字列 ""
を使うと、実際にはヌル文字だけが含まれている状態になるんだよ。
凡人: なるほど、では配列としての空文字列の先頭アドレスはどうなるの?
恋するコンピュータサイエンス: 空文字列をポインタ変数で指定するとき、その値は配列の先頭アドレスになるんだ。空文字列は文字列の終わりを意味するヌル文字のアドレスを指していると考えることができるよ。
凡人: じゃあ、空文字と空文字列を使い分けることが大事なんだね。
恋するコンピュータサイエンス: まさにそう!空文字は単一のヌル文字を指し、空文字列はヌル文字だけを含む文字列、つまり1つの要素を持つ配列を指すんだ。これらは異なる概念だから、混同しないようにすることが重要だよ。
空文字列のポイントは下記2点だ。
①空文字列は空文字('\0')を要素として持つ要素数1の配列である。
別の言い方をするのであれば、デフォルトでヌル文字が格納されている。
空文字列の先頭要素[0]は空文字('\0'
')であるため値は0である。
②また空文字列はポインタ変数を使って指定するため
そのため,単独の空文字列の値は配列の先頭アドレスとなる。
まとめ
- "空文字"と"空文字列"は、それぞれ異なる概念を表すため、用語を混同しないように注意が必要です。"空文字"は単一の文字(ヌル文字)を指し、"空文字列"はヌル文字だけを含む文字列(実際には1つの要素を持つ配列)を指します。
補足
空文字列を使って文字列を初期化すると、その文字列はヌル文字だけを含む状態になります。これは、文字列が何も含まない("空"である)状態を表します。