Carattere null

carattere di controllo con valore zero
(Reindirizzamento da Null (carattere))

Il carattere null (anche terminatore null) è un carattere di controllo con valore zero.[1][2][3][4] È presente in molti set di caratteri, inclusi quelli definiti dai codici Baudot e ITA2, ISO/IEC 646 (o ASCII), il codice di controllo C0, l'Universal Coded Character Set (o Unicode) e EBCDIC. È disponibile in quasi tutti i principali linguaggi di programmazione.[5] È spesso abbreviato come NUL (o NULL anche se in alcuni contesti quel termine viene utilizzato per il puntatore nullo, un oggetto diverso). Nei codici a 8 bit, è noto come byte nullo.

Il significato originale di questo carattere era come l'istruzione NOP — quando inviata ad una stampante o un terminale, non fa nulla (alcuni terminali, tuttavia, lo visualizzano erroneamente come spazio). Quando le telescriventi elettromeccaniche venivano utilizzate come dispositivi di output del computer, uno o più caratteri nulli venivano inviati alla fine di ogni riga stampata per consentire al meccanismo di tornare alla prima posizione di stampa sulla riga successiva.[senza fonte] Sul nastro perforato, il carattere è rappresentato senza alcun foro, quindi un nuovo nastro non perforato viene inizialmente riempito con caratteri nulli e spesso il testo potrebbe essere "inserito" in uno spazio riservato di caratteri null perforando i nuovi caratteri nel nastro sopra i null.

Oggi il carattere ha molto più significato in C, nei suoi derivati e in molti formati di dati, dove funge da carattere riservato utilizzato per indicare la fine di una stringa,[6] spesso chiamata stringa null-terminata.[7] Ciò consente alla stringa di essere di qualsiasi lunghezza con solo l'aggiunta di un byte; l'alternativa di memorizzare un conteggio richiede un limite di lunghezza della stringa di 255 o un sovraccarico di più di un byte (ci sono altri vantaggi/svantaggi descritti nell'articolo relativo alle stringhe null-terminate).

Rappresentazione modifica

Il carattere null è spesso rappresentato come sequenza di escape \0 nel codice sorgente, nelle stringhe letterali o nelle costanti di caratteri.[8] In molti linguaggi (come il C, che ha introdotto questa notazione), questa non è una sequenza di escape separata, ma una sequenza di escape ottale con una singola cifra ottale 0; di conseguenza \0 non deve essere seguito da nessuna delle cifre da 0 a 7 ; altrimenti verrebbe interpretato come l'inizio di una sequenza di escape ottale più lunga.[9] Altre sequenze di escape che si trovano in uso in vari linguaggi sono \000, \x00, \z o \u0000 . Un carattere null può essere inserito in un URL con il codice percentuale %00.

La capacità di rappresentare un carattere null non significa sempre che la stringa risultante verrà interpretata correttamente, poiché molti programmi considereranno il null come la fine della stringa. Pertanto, la possibilità di digitarlo (in caso di input dell'utente non controllato) crea una vulnerabilità nota come iniezione di byte nulli e può portare a exploit di sicurezza.[10]

Nella notazione caret il carattere null è ^@ . Su alcune tastiere, è possibile inserire un carattere null tenendo premuto Ctrl e premendo @ (su layout USA Ctrl+2, non è necessario Maiusc per ottenere il simbolo @).

Nella documentazione, il carattere null è talvolta rappresentato come un simbolo di larghezza un em contenente le lettere "NUL". In Unicode, c'è un carattere con un glifo corrispondente per la rappresentazione visiva del carattere null, "simbolo per null", U+2400 (␀), da non confondere con il carattere null effettivo, U+0000.

Codifica modifica

In tutti i set di caratteri moderni il carattere null ha un valore in punto di codice pari a zero. Nella maggior parte delle codifiche, questo viene tradotto in una singola unità di codice con un valore zero. Ad esempio, in UTF-8 è un singolo byte zero. Tuttavia, nell'UTF-8 modificato il carattere null è codificato come due byte: 0xC0, 0x80. Ciò consente al byte con valore zero, che ora non viene utilizzato per nessun carattere, di essere utilizzato come terminatore di stringa.

Note modifica

  1. ^ (EN) ASCII format for Network Interchange, in RFC20, IETF, p. 5.2, DOI:10.17487/RFC0020.
    «NUL (Null): The all-zeros character which may serve to accomplish time fill and media fill.»
  2. ^ (EN) The set of control characters of the ISO 646 (PDF), su kikaku.itscj.ipsj.or.jp, Secretariat ISO/TC 97/SC 2, 1º dicembre 1975, p. 4.4 (archiviato dall'url originale il 12 maggio 2014).
    «Position: 0/0, Name: Null, Abbreviation: Nul»
  3. ^ (EN) Unicode Character 'NULL' (U+0000), su fileformat.info. URL consultato il 20 ottobre 2018.
  4. ^ C0 Controls and Basic Latin (PDF), su unicode.org, Unicode Consortium, 2018. URL consultato il 20 ottobre 2018.
  5. ^ "A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string literal." — ANSI/ISO 9899:1990 (the ANSI C standard), section 5.2.1
  6. ^ "A string is a contiguous sequence of characters terminated by and including the first null character" — ANSI/ISO 9899:1990 (the ANSI C standard), section 7.1.1
  7. ^ (EN) Working Draft, Standard for Programming Language C++ (PDF) (ISO 14882 standard working draft), ISO/IEC, 28 febbraio 2011, p. 427, N3242=11-0012. URL consultato il 27 febbraio 2013.
    «A null-terminated byte string, or NTBS, is a character sequence whose highest-addressed element with defined content has the value zero (the terminating null character); no other element in the sequence has the value zero.»
  8. ^ Kernighan and Ritchie, C, p. 38
  9. ^ In YAML this combination is a separate escape sequence.
  10. ^ Null Byte Injection WASC Threat Classification Null Byte Attack section.
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica