Un șir terminat nul sau C-string (din numele limbajului C ) sau ASCIIZ-string este o modalitate de reprezentare a șirurilor în limbaje de programare, în care este folosită o matrice de caractere în loc de a introduce un tip de șir special, iar primul caracter nul special (NUL din codul ASCII , cu valoarea 0).
De exemplu, într-un buffer de șir (zona de memorie alocată pentru stocarea unui șir) cu o dimensiune de 11 octeți, un șir terminat cu nul „STRING” în codificarea Windows-1251 poate fi reprezentat după cum urmează:
DIN | T | R | O | La | DAR | NUL | F | % | NUL | patru |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
În acest exemplu, este reprezentată o zonă de memorie de 11 octeți, deși în realitate linia ocupă doar 7. Caracterele de după caracterul nul (8 - 11 octeți) se numesc gunoi - acestea sunt date care ar fi rămas în buffer. din rândurile anterioare sau din alte utilizări ale memoriei. Ele pot include și caractere nule.
Când se utilizează codificări pe un singur octet ( ASCII ), cantitatea de memorie necesară pentru a reprezenta un șir de N caractere este de N + 1 octeți. Când se folosește Unicode pentru a codifica caractere , lungimea șirului depinde de reprezentarea Unicode utilizată (de exemplu, 2N + 2 octeți pentru UCS-2 ).
Astfel de șiruri sunt standard în C și în alte limbaje de programare. Deoarece sunt folosite pentru a transmite argumente șir la funcții standard în multe sisteme de operare , operațiunile pentru tratarea șirurilor terminate nul au apărut în Pascal și în alte limbi.
Pentru a face referire la un șir terminat cu nul, este folosit un indicator către primul său caracter. Aceasta este o abordare simplă, rapidă și flexibilă, dar predispusă la erori [1] [2] . Programatorul trebuie să-și monitorizeze în mod constant codul, și anume:
De asemenea, unele operații cu șir, cum ar fi concatenation , sunt mai lente pentru șirurile terminate cu nul decât pentru alte tipuri de șir.
O alternativă la șirurile terminate nul sunt metodele adoptate în Pascal și limbajele OOP moderne. În Pascal, șirul începe de la primul element al matricei, iar lungimea șirului este stocată în elementul nul. În acest caz, nu este necesar un terminator special pentru a marca sfârșitul liniei. Pe de altă parte, aici lungimea șirului este limitată de capacitatea elementului zero al matricei, adică în cazul elementelor cu un singur octet, lungimea șirului nu poate depăși 255 de caractere. Șirurile terminate nu sunt supuse acestei restricții și, teoretic, pot stoca șiruri de orice lungime. Limbile orientate pe obiecte stochează o înregistrare cu lungimea unui șir și o referință (sau pointer) la o serie de caractere. Aceste metode nu suferă de dezavantajul șirurilor terminate cu nul: pot stoca caractere nule fără distorsiuni și codare specială.
Un număr de interfețe folosesc șiruri de caractere dublu-null-terminate, semnul de terminare al cărora este două consecutive null-terminators [3] .
Pentru a lucra cu șiruri terminate nul , limbajul de programare C folosește o serie de funcții :
Unele variante de limbaj de asamblare folosesc o directivă specială pentru a defini șirurile terminate cu NUL. Deci, în GNU Assembler există o directivă .asciz[4] [5] pentru aceasta .
limbaj de programare C | |
---|---|
Compilatoare |
|
Biblioteci | |
Particularități | |
Unii descendenți | |
C și alte limbi |
|
Categorie: limbaj de programare C |