- ベストアンサー
nullと""、\0とEOFの違いについて。
いつも気になっていたのですが、 (1)nullと""、(2)\0とEOFは、同じなのでしょうか、 違うのでしょうか。 (1)については、違う気がします。しかし、""は、 なにを表しているのか分かりません(0バイトなのか、 空文字にも文字コードがあるのか、""と空白" "は 違うのか)。 (2)は、同じだと思うのですが・・。 文字を数えたりすると、これらが気になります。 お願いします。
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
意味が違ってくるんです。 (1) NULL と "" 同じ事です。NULLとは「未定、未知、不明」ですので まだ文字列が決まってない(設定しない)と言うことで 未定(=NULL)です。 (2)\0 と EOF こちらは違います。文字列の終端文字としての'\0'は NULLの事で、確定している文字が無くなった=文字列の終わり と判断しているのです。 EOFは文字列ではなくファイルの終端です。 処理系によって変わってきますが、Windowsでは NULL = 0 EOF = -1 と定義されてる事からも違うのは明らかです。
その他の回答 (13)
- notnot
- ベストアンサー率47% (4900/10358)
NULLはポインタです。一般に「何も指していないポインタ」として使われます。 "" は文字列の先頭アドレスですが、その場所には'\0'の1バイトが入っています。" " だとその場所には空白文字(0x20)と'\0'の2バイトが続いて入っています。 ・NULLは何も指していない ・"" は '\0' の入ったアドレスを指している ので明らかに違います。 '\0' は文字列の終端をあらわす1バイトの文字で、整数値と見なしたときの値は0です。EOFは文字ではなくファイルの終わりを表す整数数値(-1)です。これまた全然違います。
- keroro001
- ベストアンサー率23% (71/304)
""は別名null文字列とも言われていますが、nullという用語とは違います。 文字列の終端がどこなのかわかるように、C言語では1バイトの数値0を付加するのは知っていますか? その0をC言語で表すのが\0です。 つまり、""はなにもない文字列ですが、実は終端\0が入った1バイトの文字列バッファを表します。 nullというのはそのバッファすらない状態といったらいいんでしょうか? ポインタのアドレスがオール0の時をnullと呼んだりします。 EOFはまた違った話で、入出力ファイル終端を示すコードです。 VCですと、EOFは-1で定義されていますね。
- Bonjin
- ベストアンサー率43% (418/971)
>1)nullと"" nullは実体がないことを表していますが、""は長さは0ですが実体を持った文字列です。なので二つは全く別物です。 >""と空白" "は違うのか " "(半角スペース)は0x20という文字コードで表されています。なので別物です。 >(2)\0とEOF この2つも別物です。\0は文字列の終わりを示すデータですが、EOFはファイルが終わりに達したということを示しているだけであって実際にデータとしては存在しません。 簡単に言えば文字列の最後には\0というデータがつきますが、ファイルの終わりにはEOFというデータはついていません。
- 1
- 2