Null (znak)

znak sterujący

Null lub NULznak sterujący o wartości liczbowej 0, informujący o braku informacji[1], służący jako znak wypełniający[2] w czasie lub na nośnikach danych[3][4]. Jest on dostępny w większości systemów kodowania znaków jak np. ASCII, EBCDIC lub Unikod oraz niemal we wszystkich głównych językach programowania.

Pierwotne znaczenie znaku null było podobne do instrukcji pustej. Wysyłanie go do drukarki lub terminalu nie powodowało wykonania żadnej czynności (chociaż niektóre terminale wyświetlały go nieprawidłowo jako odstęp). Na taśmach dziurkowanych wartość null była zapisywana jako obszar bez dziurek, stąd nowe taśmy były niejako z definicji wypełnione znakami null, a zarezerwowane przerwy na taśmach pozwalały na późniejsze „uzupełnienie” danych w miejscach gdzie pozostawiono znaki null.

Obecnie znak null ma znacznie większe znaczenie w języku C i językach pochodnych[5], jak również w wielu formatach danych, gdzie jego funkcją jest informacja o końcu danych tekstowych.

Język C i pochodne

edytuj

W języku C znak null jest powszechnie zapisywany jako sekwencja specjalna \0 w stałej łańcuchowej lub znakowej w kodzie źródłowym. Nie jest to jednak oddzielna sekwencja specjalna, lecz raczej sekwencja specjalna w zapisie ósemkowym z jedną cyfrą 0, wobec czego za \0 nie można umieszczać cyfr od 0 do 7, gdyż to spowoduje ich interpretowanie jako dalszego ciągu w zapisie ósemkowym. Zapisy pochodne od pierwowzoru obejmują \000, \x00, \u0000.

Język Pascal i pochodne

edytuj

W języku Pascal i pochodnych znak null można wprowadzić w następujące sposoby:

  • sekwencja sterująca ^@
  • sekwencja numeryczna dziesiętna #0
  • sekwencja numeryczna szesnastkowa #$0.

W adresie URL znak null można uzyskać przez %00. Stosowanie takiego znaku może prowadzić do awarii lub nieprawidłowego działania niedostatecznie zabezpieczonych serwisów internetowych[6].

Przypisy

edytuj
  1. Markowski, Rydzewski i Kruszyński 1989 ↓, s. 88.
  2. Cielątkowski i Porębski 1992 ↓, s. 373.
  3. RFC 20 ↓, 5.2 Control Characters.
  4. The set of control characters of the ISO 646, Secretariat ISO/TC 97/SC 2, 1 grudnia 1975, 4.4 [dostęp 2012-12-12] [zarchiwizowane z adresu 2012-07-29] (ang.).
  5. Grębosz 2000 ↓, s. 38-39.
  6. Null Byte Injection, WASC Threat Classification, 2010 [dostęp 2012-12-13] (ang.).

Bibliografia

edytuj
  • Janusz Cielątkowski, Wiesław Porębski, IBM PC dla każdego, Warszawa: Komputerowa Oficyna Wydawnicza „HELP”, 1992, ISBN 83-85137-27-0.
  • Jerzy Grębosz, Symfonia C++. Programowanie w języku C++ orientowane obiektowo, t. I, Oficyna Kallimach, 2000.
  • Andrzej Markowski, Andrzej Rydzewski, Henryk Kruszyński, Leksykon techniki mikrokomputerowej, seria: Mikrokomputery, Warszawa: Wydawnictwo Czasopism i Książek Technicznych NOT-SIGMA, 1989, ISBN 83-85001-28-X.

Linki zewnętrzne

edytuj