電子書籍の厳選無料作品が豊富!

いつも気になっていたのですが、
(1)nullと""、(2)\0とEOFは、同じなのでしょうか、
違うのでしょうか。
(1)については、違う気がします。しかし、""は、
なにを表しているのか分かりません(0バイトなのか、
空文字にも文字コードがあるのか、""と空白" "は
違うのか)。
(2)は、同じだと思うのですが・・。
文字を数えたりすると、これらが気になります。
お願いします。

A 回答 (14件中11~14件)

#1です。



混乱されるといけないので他の方と合わせましょうか。
NULL と "" について「文字を数えたり」ということ
でしたので「同じ」としました。
厳密には他の方が仰るとおりです。
『NULLポインタ』に限らず『NULL値』というのもあります。
つまり未定,不明な場合をNULLという事にしてるのです。

データベースご存じですか?Excelを高度にシステム化
したような奴なのですが、これに「非NULL制約」という
ものがあるんです。""はNULLではないのですが、
この制約がかかってる場所が""(長さ0文字列)だと
エラーになります。
つまり、NULLと""は
コンピュータ寄りで考えると別物、意味で考えると同じ
ということです。
    • good
    • 0

NULLはポインタです。

一般に「何も指していないポインタ」として使われます。
"" は文字列の先頭アドレスですが、その場所には'\0'の1バイトが入っています。" " だとその場所には空白文字(0x20)と'\0'の2バイトが続いて入っています。
・NULLは何も指していない
・"" は '\0' の入ったアドレスを指している
ので明らかに違います。

'\0' は文字列の終端をあらわす1バイトの文字で、整数値と見なしたときの値は0です。EOFは文字ではなくファイルの終わりを表す整数数値(-1)です。これまた全然違います。
    • good
    • 0

""は別名null文字列とも言われていますが、nullという用語とは違います。


文字列の終端がどこなのかわかるように、C言語では1バイトの数値0を付加するのは知っていますか?
その0をC言語で表すのが\0です。
つまり、""はなにもない文字列ですが、実は終端\0が入った1バイトの文字列バッファを表します。
nullというのはそのバッファすらない状態といったらいいんでしょうか?
ポインタのアドレスがオール0の時をnullと呼んだりします。
EOFはまた違った話で、入出力ファイル終端を示すコードです。
VCですと、EOFは-1で定義されていますね。
    • good
    • 0

>1)nullと""


nullは実体がないことを表していますが、""は長さは0ですが実体を持った文字列です。なので二つは全く別物です。

>""と空白" "は違うのか
" "(半角スペース)は0x20という文字コードで表されています。なので別物です。

>(2)\0とEOF
この2つも別物です。\0は文字列の終わりを示すデータですが、EOFはファイルが終わりに達したということを示しているだけであって実際にデータとしては存在しません。
簡単に言えば文字列の最後には\0というデータがつきますが、ファイルの終わりにはEOFというデータはついていません。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています