表示
空字元通常表示為原始碼字元串字元或字元常量中的轉義序列。在許多語言,這不是一個單獨的轉義序列,而是八進制轉義序列,單個八進制數字為0;因此,‘\0’不能跟隨任何數字0通過7;否則它被解釋為更長的八進制轉義序列的開始。被在使用中發現各種語言的其他轉義序列\000,\x00,\z,或的
Unicode表示\u0000。
表示空字元的能力並不總是意味著生成的字元串將被正確解釋,因為許多程式將認為null作為字元串的結尾。因此,鍵入它的能力(在未經檢查的用戶輸入的情況下)會創建一個稱為
空位元組注入的漏洞,並可能導致
安全漏洞。
空字元以逗號表示是^@。在Windows上,可以通過按住Ctrl鍵,然後按@(這通常需要同時按下⇧ Shift並按下數字2鍵)。
在文檔中的空字元有時表示為單EM含有字母“NUL” -width符號。在Unicode中,有一個具有相應字元的字元,用於空字元的可視表示,“null”符號,U + 2400(␀),但不要與實際的空字元U + 0000混淆。
定義
C
在C中,任何類型的兩個空指針都保證比較相等。預處理器宏NULL被定義為實現定義的空指針常量,它在
C99中可以可移植地表示為0隱式或顯式轉換為類型的整數值void*(指向void的指針)。C標準沒有說空指針與指向
記憶體地址0 的指針相同,儘管在實踐中可能就是這種情況。
解引用空指針是C中的
未定義行為,並且允許符合要求的實現假定任何被解除引用的指針不為空。
實際上,取消引用空指針可能會導致嘗試從未映射的
記憶體中讀取或寫入,從而觸發分段錯誤或記憶體訪問衝突。這可能表現為程式崩潰,或者轉換為可由程式代碼捕獲的軟體
異常。但是,在某些情況下並非如此。例如,在x86
實模式中,地址0000:0000是可讀的並且通常也是可寫的,並且取消引用指向該地址的指針是完全有效但通常不需要的操作,可能導致應用程式中的未定義但非崩潰的行為。有時解除引用地址為零的指針
是有意的、明確的;例如,用C語言編寫的用於16位
實模式x86設備的
BIOS代碼可以通過解除引用空指針來寫入機器的物理地址0處的
IDT。編譯器還可以最佳化掉空指針解除引用,���免分段錯誤但引起其他不希望的行為。
/* Define NULL pointer value and the offset() macro */#ifndef NULL#define NULL ((void *)0)#endif#endif
C++
在C ++中,雖然繼承了C的NULL宏,但空指針常量優先解釋為整型0而不是指針值,這極容易導致某些錯誤。故C++ 11引入了一個顯式
nullptr常量來代替。
SQL
Null在資料庫中表示 不知道的數據,主要有3種意思:
知道數據存在,但不知道具體值.
不知道數據是否存在.
數據不存在.
NULL與0有著扯不斷理還亂的關係,其實不那么高深。0本身有著一些原生的特性諸如:起始,沒有,正負的分界線,0/1中的0還可以表示否定。NULL正需要這些特性中的一部分。 我們只需要清楚NULL的本質,並在合理的地方才加以利用而非濫用。
MATLAB
函式null用來求解零空間,即滿足方程組A*X=0的解空間。實際上是求出解空間的一組解(基礎解系)。
語法:z=null(A) %z的列向量為方程組的正交規範基,滿足z‘ x z=I。
z=null(A,'r') %z的列向量是方程A*X=0的有理基。
PHP
NULL類型為 php 4 所引進,特殊的NULL值表示一個變數沒有值(NULL類型唯一可能的值就是NULL)。
在下列情況下一個變數被認為是NULL:
JAVA
java中的null是一個關鍵字,通常用來聲明一個空引用,
表示對象o是一個空引用,如果程式設計師對它進行了引用,就會拋出一個NullPointerException異常。
編碼
在所有現代字元集中,空字元的代碼點值為零。在大多數編碼中,這被轉換為具有零值的單個代碼單元。例如在UTF-8中,它是一個零位元組。然而,在修改的UTF-8中,空字元被編碼為兩個位元組:0xC0,0x80。這允許值為零的位元組(現在不用於任何字元)用作字元串終結符。