遅刻の「言い訳」選手権

ものすごく基本的なことですが、NULLとブランクはどうちがうのでしょうか?
また、ブランクってスペースと同じでしょうか?
""=ブランクと記述されたり、空白=ブランクと記述されたりしていますが、よくわかりません。。。
よろしくおねがいします。

A 回答 (6件)

どちらも「ない」事ですが、違いを分かりやすく言えば



ブランク(空白)は見たけど無い
ヌル(null)は見てないのでわから無い

情報処理に従事してる方には当たり前の事ですが、値は全然違います。

ブランク= 20(16)や40(16)
ヌル= 00(16)
    • good
    • 2

#3です。

#4さんの回答を受けて自分の回答が誤解を招くと思ったので修正回答です。

一般的に「意味をもたない空白」をブランクと、「間隔・距離(意味をもつ空白)」をスペースと表現しわけます。(必ずしもそうでない場合も有りますが、やはり多くの場合は使い分けます。)

そうした「意味をもたない空白,箱」という意味で "" をブランクと呼ぶ人が多いです。対して "  " は明確に間隔・距離を示すスペース(文字)と呼ぶ人が多いです。

蛇足ですが、【昔は】、""をブランクではなくNULLとよび、"  "をスペースではなくブランクとよぶ事が一般的に多かったのですが、今はやはり未定義の内容をNULL、"  "をスペースと呼ぶのが一般的に浸透して、結果的に""をブランクと使い分けていると感じます。 このあたりの背景事情から今だ人によって解釈が異なる場合もでて、ややこしいですが。
特にブランクとスペースはどちらも空白や余白と訳されてしまいますが、ニュアンスは異なります。
    • good
    • 1
この回答へのお礼

貴重なご意見ありがとうございました。

お礼日時:2007/04/05 20:45

★私には『""=ブランク』の表現がしっくり来ません。


・『blank』ってのは、空白、余白、スペースという意味です。
 なので『""』をブランクと呼ぶ表現はおかしいと思います。普通は『""』を空文字列と呼びます。
 空文字列とは、文字列が何もないが文字列としてのポインタ(アドレス)を持つデータです。
・そして、NULL はポインタ(アドレス)の値がゼロを持ち、ポインタにはデータは割り付けていない事を
 意味します。つまり『データなし』を意味します。
・他にも NULL にはいろいろな意味を持たせたりします。
 (1)検索処理で文字、文字群、文字列などが見つからないと NULL を返す。→エラーの意味。
 (2)最初、ポインタ(アドレス)の変数に NULL をセットして初期化しておく。→初期化の意味。
 (3)C言語の『fgets』関数などは、ファイルの終わりか、エラーが発生すると NULL を返してお知らせ。
 上記のように処理によって意味が少しずつ異なりますが、一般には NULL は『データなし』、『無効』
 『エラーが発生』などの意味を持っています。特にポインタ(アドレス)で何かのデータを返す関数では
 『無効』や『エラー』時に NULL ポインタを必ず返します。
・あと NULL 文字も存在します。
 これはC言語でいう文字列の最後を表す \0 を指します。
 初心者さんは、NULL 文字(\0)と NULL ポインタを同じ扱いにしてしまいますが『別物』です。
 NULL 文字(\0)は、文字コードが 0x00 の 1 バイトの値です。→マルチバイトの場合
 これに対して NULL ポインタは、ポインタ(アドレス)の値が 0x00000000(32Bit) です。
 ポインタとバイトでは意味が違います。注意!

まとめ:
・『blank』⇒空白、余白、スペースという意味です。
・『""』⇒空文字列です。何もない『空』の文字列ポインタです。
・『NULL』⇒NULL ポインタです。ポインタの値が 0x00000000 です。
・『\0』⇒NULL 文字です。文字列の最後を表すバイトで 0x00 です。
・wakasen さんが参照した記事の表現は、適切ではないため注意して下さい。→混乱させる表現です。
 正しくは、『""』=空文字列、『空白』=ブランク(スペース)、『NULL』=NULL ポインタです。
・以上。おわり。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございました。
非常に分かりやすかったです。

お礼日時:2007/04/05 20:50

ブランク:値が存在しない/0もスペースも存在しない。


スペース:スペース文字が存在する。

ブランクも空白と表現される事がありますが、正確にはブランクは空でスペースが空白であって、意味は異なります。

NULL:値が定義されていない

NULLは、処理系によって動作が異なりますが、値が定義されていない=空(ブランク)とも、0とも、空白とも定義されていない状態です。

なかなか理解が難しいですが、日常に例えていいますと、
・箱をあなたが買って来たとします。(変数を定義します。)
さて、内容は?

答えは、「わかりません」
箱の使い方や組み立て方のパンフレットが入っているかもしれないし、何も無いかも知れません。まだ買ってきた箱は包装された状態で、内容を見る事もできません。これがNULLです。

箱の包装を開き、内容を全て取り出した状態、何も入っていない状態、これがブランクです。


注意が必要なのは、NULLとNULLは、どちらも内容がわかりませんから、比較ができません。

例えば、今日買った箱には、パンフレットが入っているかも知れません。でも、パンフレットが期間限定だったり数量限定だったりして、毎回同じとは限りません。
ですから、未開封の箱(NULL)と未開封の箱(NULL)は比較出来ません。

但し、処理系によっては、「不明な物は比較できない」とエラーになる物もあるし、「未開封」と「未開封」で同じ、と判断する物もあるし、実際に開封してみて、内容を比較し、(場合によっては)内容が異なったという結果を返す可能性すらあります。


なお、NULLと空白の比較や、ブランクと0との比較などは当然異なるという結果を返しますが、
「内容が『有る』か『無し』か?」というチェックの場合には、ブランク(何もない)・NULL(何も定義されていない)・0(数値がない)といずれも同一の結果(TRUEではない=FALSE)を返す処理が多用されます。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございました。

お礼日時:2007/04/05 20:44

イメージとしては、NULLは何が分からないかも分からない状態、ブランクは何が分からないかは分かっている状態。


ブランクにはブランクというものが入っています。イメージとしては0です。そこには0というものが存在するわけです。インド人って偉大です。NULLは本当に何もありません。

扱いはソフトによって異なります。ブランクとブランクは殆ど(おそらく全て)の言語で比較が可能です。当然等しいという結果になります。
NULL同士の比較は言語によって扱いが異なります。ある限定した条件ならNULLとNULLは等しいという表現ができることもあります。ただ多くのケースでNULLとNULLの比較結果はNULLになりますし、NULLを比較しようとした時点でエラーをはくこともあります。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございました。

お礼日時:2007/04/05 20:44

「NULL」とは、無効な文字列のことです。


実体の無いからっぽのデータを意味する単語で、エラー処理に用いられます。
(普段は数字が入るはずの変数にNULLが入ったらエラー処理に飛ばす、とか)

「ブランク」は、完全な空白です。スペースとは違いますね。
(変数に数値を代入するが、初期値はブランクにしておく、とか)

私の意見としては、こんな感じです。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございました。

お礼日時:2007/04/05 20:43

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

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


おすすめ情報