Carattere null
# Carattere null

Il carattere null (anche terminatore null) è un carattere di controllo con valore zero. È 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. È 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. 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, spesso chiamata stringa null-terminata. 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

Il carattere null è spesso rappresentato come sequenza di escape \0 nel codice sorgente, nelle stringhe letterali o nelle costanti di caratteri. 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. 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.

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 ⇧ Shift 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

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.

