Le terminateur nul
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 13 sur 63.
Vous avez appris que les chaînes de caractères en C sont des tableaux de caractères, mais il y a un détail crucial qui permet de les faire fonctionner correctement : chaque chaîne en C doit se terminer par un caractère spécial appelé le caractère nul (null terminator), écrit sous la forme \0.
Le terminateur nul est un caractère ayant la valeur ASCII zéro qui marque la fin d'une chaîne de caractères. Sans lui, les fonctions comme printf ne sauraient pas où votre chaîne se termine et continueraient à lire la mémoire jusqu'à ce qu'elles rencontrent par hasard un octet nul, produisant souvent un résultat incohérent.
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Le \0 indique à C : "The string ends here"Lorsque vous initialisez une chaîne de caractères avec un littéral comme "Hello", le C ajoute automatiquement le terminateur nul pour vous. Mais lorsque vous construisez manuellement une chaîne caractère par caractère, vous devez vous souvenir d'ajouter \0 à la fin.
Ce terminateur nul est la raison pour laquelle un mot de 5 caractères comme "Hello" nécessite un tableau de caractères de 6 éléments - un espace supplémentaire pour le \0. Comprendre ce concept est essentiel car c'est le fondement de la manière dont toutes les fonctions de chaîne en C déterminent où les chaînes commencent et se terminent.
Défi
FacileÉcrivez un programme en C qui démontre la création et la manipulation de chaînes de caractères en utilisant une initialisation manuelle caractère par caractère avec une terminaison nulle appropriée. Votre programme doit :
- Déclarer un tableau de caractères nommé
nameavec exactement 5 éléments - Initialiser manuellement le tableau
namecaractère par caractère pour épeler "John" avec une terminaison nulle appropriée :- Premier élément : 'J'
- Deuxième élément : 'o'
- Troisième élément : 'h'
- Quatrième élément : 'n'
- Cinquième élément :
'\0'(terminateur nul)
- Déclarer un deuxième tableau de caractères nommé
cityavec exactement 7 éléments - Initialiser manuellement le tableau
citycaractère par caractère pour épeler "Boston" avec une terminaison nulle appropriée :- Utiliser des affectations de caractères individuelles pour 'B', 'o', 's', 't', 'o', 'n', et
'\0'
- Utiliser des affectations de caractères individuelles pour 'B', 'o', 's', 't', 'o', 'n', et
- Afficher les deux chaînes en utilisant
printfavec le spécificateur de format%s - Démontrer ce qui se passe sans terminaison nulle en créant un troisième tableau de caractères nommé
testavec 4 éléments - Initialiser
testavec seulement les caractères 'A', 'B', 'C', 'D' (sans terminateur nul) - Afficher le tableau
testen utilisant%spour montrer un résultat imprévisible
Votre sortie doit afficher les résultats dans le format suivant :
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]Ce défi teste votre compréhension de la construction manuelle de chaînes, de l'importance critique du terminateur nul '\0' dans les chaînes en C, et de la manière dont printf avec %s s'appuie sur la recherche du terminateur nul pour savoir où la chaîne se termine.
Aide-mémoire
Les chaînes de caractères en C sont des tableaux de caractères qui doivent se terminer par un terminateur nul \0 pour marquer la fin de la chaîne.
Le terminateur nul a une valeur ASCII de zéro et indique aux fonctions comme printf où la chaîne se termine :
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Le \0 indique au C : "La chaîne se termine ici"Lors de l'utilisation de littéraux de chaîne comme "Hello", le C ajoute automatiquement le terminateur nul. Lors de la construction de chaînes caractère par caractère, vous devez ajouter manuellement \0.
Une chaîne nécessite un élément de tableau supplémentaire pour le terminateur nul - "Hello" (5 caractères) nécessite un tableau de 6 éléments.
Essayez vous-même
#include <stdio.h>
int main() {
// TODO: Écrivez votre code ici
// Déclarer et initialiser les tableaux de caractères comme spécifié
// Afficher les résultats
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes