ヌル文字は、値がゼロの制御文字です。[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]多くの文字セットには、ヌル文字のコードポイントが含まれています。これには、 Unicode ( Universal Coded Character Set )、ASCII ( ISO/IEC 646 )、Baudot、ITA2コード、C0 制御コード、およびEBCDIC が含まれます。最新の文字セットでは、ヌル文字のコードポイント値はゼロであり、これは通常、値がゼロの単一のコード単位に変換されます。たとえば、UTF-8では、単一のゼロバイトです。
元々、その意味はNOPのようなもので、プリンタや端末に送信されても何も効果はありませんでした(ただし、一部の端末では誤ってスペースとして表示されていました)。電気機械式テレプリンタがコンピュータの出力装置として使用されていた頃は、次の行の最初の印刷位置に戻るための時間を確保するため、印刷された各行の最後に1つ以上のヌル文字が送信されていました。パンチテープでは、この文字は穴が全くなく表現されるため、新しい未パンチテープは最初はヌル文字で埋め尽くされており、多くの場合、ヌル文字の予約スペースに新しい文字をヌル文字の上にパンチすることでテキストを挿入することができました。
ヌル終端文字列は、 C 言語、その多くの派生言語、およびその他のプログラミング環境で一般的に使用されるデータ構造であり、ヌル文字を使用して文字列の終わりを示します。[ 6 ] [ 7 ] この設計により、メモリを 1 文字追加するだけで、文字列の長さを任意にすることができます。文字列の一般的な競合設計では、文字列の長さを整数データ型として格納しますが、これにより文字列のサイズが整数の範囲に制限されます (たとえば、1 バイトの場合は 255)。
バイトストレージの場合、ヌル文字はヌルバイトと呼ばれることがあります。
ヌル文字は印刷可能な文字ではないため、ソースコードでそれを表現するには特別な表記法が必要です。
文字列リテラルでは、ヌル文字はエスケープシーケンス\0として表現されることが多い(たとえば、"abc\0def")。文字リテラル (つまり、'\0') にも同様の表記法がよく使われるが、これは多くの場合、ゼロの数値リテラル ( 0) と同等である。[ 8 ]多くの言語 (この表記法を導入したC など) では、これは独立したエスケープシーケンスではなく、単一の8 進数 0を含む 8 進エスケープシーケンスである。したがって、 の後に から まで\0の数字が続くと、より長い 8 進エスケープシーケンスの開始として解釈されるため、 の後には が続いてはならない。[ 9 ]さまざまな言語で使用されている他のエスケープシーケンスには、 、、、 または がある。07\000\x00\z\u0000
パーセントコードを使用すると、URLにヌル文字を挿入できます。%00
ヌル文字を表現できるからといって、必ずしも結果として得られる文字列が正しく解釈されるとは限りません。多くのプログラムはヌルを文字列の終わりとみなすためです。したがって、ヌルを入力できる機能(チェックされていないユーザー入力の場合)は、ヌルバイトインジェクションと呼ばれる脆弱性を生み出し、セキュリティ上の悪用につながる可能性があります。[ 10 ]
ソフトウェアのドキュメントでは、ヌル文字はしばしばテキストNUL (またはNULLですが、これはヌルポインタを意味する場合もあります) で表されます。Unicode には、これを表す文字があります: U+2400 ␀ SYMBOL FOR NULL。
キャレット表記では、ヌル文字は です。一部のキーボードでは、 を押しながら を押す^@ことでヌル文字を入力できます(US レイアウトでは、 を押しながら+ を押すだけで多くの場合機能します。@ 記号を入力するために を押す必要はありません)。Ctrl@Ctrl2⇧ Shift
のあるすべてゼロの文字。
位置:0/0、名前:ヌル、略語:ヌル
ヌル
終端バイト文字列(NTBS) は、定義済みのコンテンツを持つ最もアドレスが近い要素の値がゼロ (
終端ヌル
文字)である文字シーケンスです
。シーケンス内の他の要素はゼロの値を持ちません。