Il terminatore null
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 13 di 63.
Hai imparato che le stringhe in C sono array di caratteri, ma c'è un dettaglio fondamentale che permette loro di funzionare correttamente: ogni stringa C deve terminare con un carattere speciale chiamato terminatore nullo, scritto come \0.
Il terminatore null è un carattere con valore ASCII pari a zero che indica la fine di una stringa. Senza di esso, funzioni come printf non saprebbero dove termina la stringa e continuerebbero a leggere la memoria finché non incontrano casualmente un byte zero, spesso producendo un output senza senso.
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Il \0 indica a C: "The string ends here"Quando inizializzi una stringa con un valore letterale come "Hello", C aggiunge automaticamente il terminatore nullo. Ma quando costruisci manualmente una stringa carattere per carattere, devi ricordarti di aggiungere \0 alla fine.
Questo terminatore null è il motivo per cui una parola di 5 caratteri come "Hello" richiede un array di caratteri di 6 elementi: uno spazio in più per \0. Comprendere questo concetto è essenziale, perché costituisce il fondamento del modo in cui tutte le funzioni per stringhe in C determinano dove iniziano e finiscono le stringhe.
Sfida
FacileScrivi un programma C che mostri come creare e usare stringhe mediante inizializzazione manuale carattere per carattere con la corretta terminazione null. Il programma deve:
- Dichiarare un array di caratteri chiamato
namecon esattamente 5 elementi - Inizializzare manualmente l'array
namecarattere per carattere in modo da comporre "John", con la corretta terminazione null:- Primo elemento: 'J'
- Secondo elemento: 'o'
- Terzo elemento: 'h'
- Quarto elemento: 'n'
- Quinto elemento:
'\0'(terminatore null)
- Dichiarare un secondo array di caratteri chiamato
citycon esattamente 7 elementi - Inizializzare manualmente l'array
citycarattere per carattere in modo da comporre "Boston", con la corretta terminazione null:- Usare assegnazioni individuali dei caratteri per 'B', 'o', 's', 't', 'o', 'n' e
'\0'
- Usare assegnazioni individuali dei caratteri per 'B', 'o', 's', 't', 'o', 'n' e
- Stampare entrambe le stringhe usando
printfcon lo specificatore di formato%s - Mostrare cosa succede senza terminazione null creando un terzo array di caratteri chiamato
testcon 4 elementi - Inizializzare
testsolo con i caratteri 'A', 'B', 'C', 'D' (senza terminatore null) - Stampare l'array
testusando%sper mostrare un risultato imprevedibile
L'output deve mostrare i risultati nel seguente formato:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]Questa sfida verifica la tua comprensione della creazione manuale di stringhe, dell'importanza fondamentale del terminatore null '\0' nelle stringhe C e di come printf con %s si basi sulla ricerca del terminatore null per sapere dove termina la stringa.
Provalo tu
#include <stdio.h>
int main() {
// TODO: Scrivi qui il tuo codice
// Dichiara e inizializza gli array di caratteri come specificato
// Stampa i risultati
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online