ヌル文字

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

ヌル文字ヌルターミネータ)は、値がゼロの制御文字です。[1] [2] [3] [4] BaudotおよびITA2コード、ISO / IEC 646(またはASCII)、C0制御コード、 Unicodeコード文字セット(またはUnicode)、およびEBCDICほぼすべての主流のプログラミング言語で利用できます。[5]それはしばしばNULと略されます(またはNULL。ただし、一部のコンテキストでは、その用語はnullポインターに使用されます)。8ビットコードでは、ヌルバイトと呼ばれます。

この文字の本来の意味はNOPのようなものでした—プリンターまたは端末に送信された場合、効果はありません(ただし、一部の端末では誤ってスペースとして表示されます)。電気機械式テレプリンターがコンピューター出力デバイスとして使用された場合、メカニズムが次の行の最初の印刷位置に戻るための時間を確保するために、各印刷行の終わりに1つ以上のヌル文字が送信されました。要出典紙テープ、文字はまったく穴なしで表されるため、新しいパンチされていないテープは最初はヌル文字で埋められ、多くの場合、新しい文字をヌルの上にテープにパンチすることで、ヌル文字の予約スペースにテキストを挿入できます。

今日、この文字は、 Cとその派生文字、および多くのデータ形式ではるかに重要であり、文字列終わりを示すために使用される予約文字として機能します[6]。多くの場合、nullで終了する文字列と呼ばれます。[7]これにより、文字列は1バイトのオーバーヘッドのみで任意の長さにすることができます。カウントを格納する代わりに、255の文字列長制限または1バイトを超えるオーバーヘッドが必要です(nullで終了する文字列の記事に記載されている他の長所/短所があります)。

表現

ヌル文字は、多くの場合ソースコード文字列リテラル、または文字定数でエスケープシーケンスとして表されます。 [8]多くの言語(この表記法を導入したCなど)では、これは別個のエスケープシーケンスではなく、1つの8進数の0を持つ8進数のエスケープシーケンスです。結果として、;までの数字の後に続けることはできません。それ以外の場合は、より長い8進数のエスケープシーケンスの開始として解釈されます。[9]さまざまな言語で使用されている他エスケープシーケンスは、、、、、またはです。URLにヌル文字を入れることができます\0\007\000\x00\z\u0000パーセントコード %00

多くのプログラムはヌルを文字列の終わりと見なすため、ヌル文字を表現できるからといって、結果の文字列が正しく解釈されるとは限りません。したがって、それを入力する機能(チェックされていないユーザー入力の場合)は、ヌルバイトインジェクションと呼ばれる脆弱性を作成し、セキュリティの悪用につながる可能性があります。[10]

キャレット記法では、ヌル文字は^@です。Ctrl一部のキーボードでは、長押しして押すことでヌル文字を入力できます(米国のレイアウトでは、 +だけで機能することが多く、@記号を取得する 必要はありません)。@Ctrl2⇧ Shift

ドキュメントでは、ヌル文字は「NUL」の文字を含む単一のem幅の記号として表されることがあります。Unicodeには、ヌル文字を視覚的に表現するための対応するグリフ、ヌルを表す記号、U + 2400(␀)があります。実際のヌル文字、U+0000と混同しないでください。

エンコーディング

最新のすべての文字セットでは、ヌル文字のコードポイント値はゼロです。ほとんどのエンコーディングでは、これはゼロ値の単一のコードユニットに変換されます。たとえば、UTF-8では単一のゼロバイトです。ただし、Modified UTF-8では、ヌル文字は2バイト(0xC0、0x80)としてエンコードされます。これにより、値がゼロのバイト(現在はどの文字にも使用されていない)を文字列ターミネータとして使用できます。

問題

Nullという名前の人の中には、コンピューターシステムで問題が発生した人もいます。[11] [12]

参照

  1. ^ ネットワーク交換用のASCII形式IETF5.2。土井10.17487/RFC0020RFC20 _ NUL(Null):タイムフィルとメディアフィルを実行するのに役立つ可能性のあるすべてゼロの文字。
  2. ^ 「ISO646の制御文字のセット」(PDF)事務局ISO/TC 97 / SC2.1975-12-01。p。4.4。2014年5月12日にオリジナル(PDF)からアーカイブされました位置:0/0、名前:Null、省略形:Nul
  3. ^ "ユニコード文字'NULL'(U + 0000)" 2018年10月20日取得
  4. ^ 「C0コントロールと基本ラテン文字」(PDF)ユニコードコンソーシアム。2018 2018年10月20日取得
  5. ^ 「ヌル文字と呼ばれるすべてのビットが0に設定されたバイトは、基本実行文字セットに存在する必要があります。これは、文字列リテラルを終了するために使用されます。」— ANSI / ISO 9899:1990(ANSI C規格)、セクション5.2.1
  6. ^ 文字列は、最初のヌル文字で終了し、最初のヌル文字を含む連続した文字のシーケンスです」— ANSI / ISO 9899:1990(ANSI C標準)、セクション7.1.1
  7. ^ ワーキングドラフト、プログラミング言語C ++の標準(PDF)(ISO 14882標準ワーキングドラフト)、ISO / IEC、2011年2月28日、p。427、N3242 = 11-0012 2013年2月27日取得ヌル終了バイト文字列、またはNTBSは、定義されたコンテンツを持つ最上位アドレスの要素の値がゼロ(終了ヌル文字)の文字シーケンスです。シーケンス内の他の要素の値がゼロではありません。
  8. ^ カーニハンとリッチー、 C、p。38
  9. ^ YAMLでは、この組み合わせは別個のエスケープシーケンスです。
  10. ^ ヌルバイトインジェクションWASC脅威分類ヌルバイト攻撃セクション。
  11. ^ 「こんにちは、私はヌルさんです。私の名前は私をコンピューターから見えなくします」有線ISSN1059-1028 _ 2021-09-13を取得 
  12. ^ Howitt、Chris Baraniuk/Oliviaによる画像。「これらの不運な人々は、コンピューターを壊すような名前を持っています」BBC2021-09-13を取得{{cite web}}: CS1 maint: url-status (link)

外部リンク