Caracter nul

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Caracterul nul (de asemenea, terminatorul nul ) este un caracter de control cu valoare zero. [1] [2] [3] [4] Este prezent în multe seturi de caractere , inclusiv în cele definite de codurile Baudot și ITA2 , ISO / IEC 646 (sau ASCII ), codul de control C0, „ Setul de caractere codate universal (sau Unicode ) și EBCDIC . Este disponibil în aproape toate limbajele de programare majore. [5] Este adesea abreviat ca NUL (sau NULL, deși în unele contexte acel termen este folosit pentru indicatorul nul, un obiect diferit). În codurile de 8 biți, este cunoscut ca un octet nul .

Înțelesul inițial al acestui caracter era ca instrucțiunea NOP - atunci când este trimis la o imprimantă sau terminal , nu face nimic (unele terminale, totuși, îl afișează incorect ca spațiu ). Când teleimprimantele electromecanice au fost utilizate ca dispozitive de ieșire a computerului, unul sau mai multe caractere nule au fost trimise la sfârșitul fiecărei linii tipărite pentru a permite mecanismului să revină la prima poziție de imprimare pe următoarea linie. [ fără sursă ] Pe banda perforată , personajul este reprezentat fără găuri, astfel încât o nouă bandă non-perforată este umplută inițial cu caractere nule și deseori textul poate fi „inserat” într-un spațiu rezervat de caractere nule prin introducerea de caractere noi în panglica de deasupra nulelor.

Astăzi, caracterul are mult mai multă semnificație în C , derivatele sale și multe formate de date, unde servește ca un caracter rezervat folosit pentru a indica sfârșitul unui șir , [6] numit deseori un șir terminat nul . [7] Acest lucru permite șirului să fie de orice lungime, cu un singur octet adăugat; alternativa stocării unui număr necesită o limită de lungime a șirului de 255 sau o cheltuială de mai mult de un octet (există alte avantaje / dezavantaje descrise în articolul despre șirurile terminate cu nul ).

Reprezentare

Caracterul nul este adesea reprezentat ca o secvență de evadare \0 în codul sursă , șiruri literale sau constante de caracter. [8] În multe limbi ( cum ar fi C , care a introdus această notație), aceasta nu este o secvență de evadare separată, ci o secvență de evadare octală cu o singură cifră octală 0; în consecință, \0 nu trebuie să fie urmat de niciuna dintre cifrele de la 0 la 7 ; altfel ar fi interpretat ca începutul unei secvențe de scăpare octal mai lungi. [9] Alte secvențe de evadare găsite în utilizare în diferite limbi sunt \000 , \x00 , \z sau \u0000 . Un caracter nul poate fi inserat într-o adresă URL cu codul procentual %00 .

Abilitatea de a reprezenta un caracter nul nu înseamnă întotdeauna că șirul rezultat va fi interpretat corect, deoarece multe programe vor trata nul ca sfârșitul șirului. Prin urmare, capacitatea de a-l tasta (în caz de intrare necontrolată a utilizatorului ) creează o vulnerabilitate cunoscută sub numele de injecție de octet nul și poate duce la exploatări de securitate. [10]

În notația caret, caracterul nul este ^@ . Pe unele tastaturi, puteți introduce un caracter nul ținând apăsat Ctrl și apăsând @ (pe aspectul SUA Ctrl + 2 , nu este necesar Shift pentru a obține simbolul @).

În documentația, caracterul nul este uneori reprezentat ca un Molodva simbol larg care conține literele „NUL“. În Unicode , există un caracter cu un glif potrivit pentru reprezentarea vizuală a caracterului nul, „simbol pentru nul”, U + 2400 (␀), care nu trebuie confundat cu caracterul nul real, U + 0000.

Codificare

În toate seturile de caractere moderne, caracterul nul are o valoare a punctului de cod zero. În majoritatea codificărilor, acest lucru este tradus într-o singură unitate de cod cu o valoare zero. De exemplu, în UTF-8 este un singur octet zero. Cu toate acestea, în UTF-8 modificat , caracterul nul este codificat ca doi octeți: 0xC0, 0x80. Acest lucru permite ca octetul cu valoare zero, care acum nu este utilizat pentru niciun caracter, să fie folosit ca terminator de șiruri.

Notă

  1. ^ (EN) format ASCII pentru Network Interchange în RFC20, IETF , p. 5.2, DOI : 10.17487 / RFC0020 .
    "NUL (Null): caracterul cu toate zerourile care poate servi la realizarea umplerii de timp și a umplerii media." .
  2. ^ (EN) Setul de caractere de control al ISO 646 (PDF), pe kikaku.itscj.ipsj.or.jp, Secretariatul ISO / TC 97 / SC 2, 1 decembrie 1975, p. 4.4 (arhivat din original la 12 mai 2014) .
    „Poziție: 0/0, nume: nul, abreviere: Nul” .
  3. ^ (EN) Caracter Unicode „NULL” (U + 0000) , pe fileformat.info. Adus la 20 octombrie 2018 .
  4. ^ C0 Controls and Basic Latin ( PDF ), pe unicode.org , Unicode Consortium, 2018. Accesat la 20 octombrie 2018 .
  5. ^ "Un octet cu toți biții setați la 0, numit caracter nul , va exista în setul de caractere de execuție de bază; este utilizat pentru a termina un șir de caractere literal." - ANSI / ISO 9899: 1990 (standardul ANSI C), secțiunea 5.2.1
  6. ^ "Un șir este o secvență contiguă de caractere terminate de și care include primul caracter nul" - ANSI / ISO 9899: 1990 (standardul ANSI C), secțiunea 7.1.1
  7. ^ ( EN ) Proiect de lucru, Standard pentru limbajul de programare C ++ ( PDF ) (proiect de lucru al standardului ISO 14882), ISO / IEC , 28 februarie 2011, p. 427, N3242 = 11-0012. Adus pe 27 februarie 2013 .
    „Un șir de octeți terminat nul , sau NTBS, este o secvență de caractere al cărei element cu cea mai mare adresă cu conținut definit are valoarea zero ( caracterul nul de terminare ); niciun alt element din secvență nu are valoarea zero. " .
  8. ^ Kernighan și Ritchie, C , p. 38
  9. ^ În YAML această combinație este o secvență de evadare separată .
  10. ^ Secțiunea Null Byte Injection Clasificarea amenințărilor WASC Null Byte Attack.
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT