Znak zerowy - Null character

Znak null (również null terminator ) to znak sterujący o wartości zero. Występuje w wielu zestawach znaków , w tym zdefiniowanych przez kody Baudot i ITA2 , ISO/IEC 646 (lub ASCII ), kod kontrolny C0 , Universal Coded Character Set (lub Unicode ) i EBCDIC . Jest dostępny w prawie wszystkich głównych językach programowania . Często jest skracany jako NUL (lub NULL, chociaż w niektórych kontekstach termin ten jest używany dla wskaźnika null , innego obiektu). W kodach 8-bitowych jest znany jako bajt null .

Pierwotne znaczenie tego znaku było jak NOP — po wysłaniu do drukarki lub terminala nic nie robi (niektóre terminale niepoprawnie wyświetlają go jako spację ). Gdy teledrukarki elektromechaniczne były używane jako komputerowe urządzenia wyjściowe, na końcu każdego drukowanego wiersza wysyłano jeden lub więcej znaków zerowych, aby umożliwić mechanizmowi powrót do pierwszej pozycji drukowania w następnym wierszu. Na taśmie dziurkowanej znak jest reprezentowany bez żadnych dziur, więc nowa niedziurkana taśma jest początkowo wypełniona znakami pustymi i często tekst można „wstawić” w zarezerwowane miejsce znaków pustych poprzez wybicie nowych znaków na taśmie wartości null.

Dziś znak ma znacznie większe znaczenie w C i jego pochodnych oraz w wielu formatach danych, gdzie służy jako znak zastrzeżony używany do oznaczenia końca łańcucha , często zwanego łańcuchem zakończonym znakiem zerowym . Dzięki temu łańcuch może mieć dowolną długość z tylko jednym bajtem narzutu; alternatywa przechowywania licznika wymaga albo limitu długości łańcucha wynoszącego 255, albo narzutu więcej niż jednego bajtu (istnieją inne zalety/wady opisane w artykule o łańcuchu zakończonym znakiem null ).

Reprezentacja

Znak null jest często reprezentowany jako sekwencja ucieczki \0 w kodzie źródłowym , literałach ciągów lub stałych znakowych. W wielu językach ( takich jak C , który wprowadził tę notację), nie jest to oddzielna sekwencja ucieczki, ale ósemkowa sekwencja ucieczki z pojedynczą cyfrą ósemkową 0; w konsekwencji \0nie może następować po niej żadna z cyfr 0do 7; w przeciwnym razie jest interpretowany jako początek dłuższej ósemkowej sekwencji ucieczki. Inne sekwencje specjalne, które znajdują się w użyciu w różnych językach są \000, \x00, \z, lub \u0000. Znak null można umieścić w adresie URL z kodem procentowym %00 .

Możliwość reprezentowania znaku null nie zawsze oznacza, że ​​wynikowy łańcuch zostanie poprawnie zinterpretowany, ponieważ wiele programów uzna null za jego koniec. W ten sposób możliwość wpisania go (w przypadku niesprawdzonych danych wejściowych użytkownika ) tworzy lukę znaną jako wstrzyknięcie zerowego bajtu i może prowadzić do luk w zabezpieczeniach.

W notacji z daszkiem znak null to ^@. Na niektórych klawiaturach można wprowadzić znak null przytrzymując Ctrli naciskając @(w układach US często działa tylko Ctrl+ 2, nie ma potrzeby ⇧ Shiftuzyskiwania znaku @).

W dokumentacji, postać zerowy jest czasem przedstawiany jako jedno- em -width symbolem zawierającym litery „nul”. W Unicode istnieje znak z odpowiednim glifem do wizualnej reprezentacji znaku null, „symbol for null”, U+2400 (␀) — nie mylić z rzeczywistym znakiem null, U+0000.

Kodowanie

We wszystkich nowoczesnych zestawach znaków znak null ma wartość punktu kodowego równą zero. W większości kodowań jest to tłumaczone na pojedynczą jednostkę kodu o wartości zerowej. Na przykład w UTF-8 jest to pojedynczy bajt zerowy. Jednak w zmodyfikowanym UTF-8 znak null jest zakodowany jako dwa bajty: 0xC0, 0x80. Dzięki temu bajt o wartości zero, który nie jest obecnie używany dla żadnego znaku, może być używany jako terminator ciągu.

Problemy

Niektórzy ludzie o imieniu Null doświadczyli problemów z systemami komputerowymi.

Bibliografia

Zewnętrzne linki

  • Wstrzykiwanie bajtów zerowych WASC Klasyfikacja zagrożeń Sekcja ataku bajtów zerowych
  • Poison Null Byte Wprowadzenie Wprowadzenie do Nullify 9
  • Atak bajtowy