Menu
Coddy logo textTech

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.

challenge icon

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 :

  1. Déclarer un tableau de caractères nommé name avec exactement 5 éléments
  2. Initialiser manuellement le tableau name caractè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)
  3. Déclarer un deuxième tableau de caractères nommé city avec exactement 7 éléments
  4. Initialiser manuellement le tableau city caractè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'
  5. Afficher les deux chaînes en utilisant printf avec le spécificateur de format %s
  6. Démontrer ce qui se passe sans terminaison nulle en créant un troisième tableau de caractères nommé test avec 4 éléments
  7. Initialiser test avec seulement les caractères 'A', 'B', 'C', 'D' (sans terminateur nul)
  8. Afficher le tableau test en utilisant %s pour 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;
}
quiz iconTestez-vous

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