Partie 6 - Les chaînes de caractères en langage C

@joekakone

Joseph Konka @joekakone

03/03/2026 · 6 min

Comprenez la nature des chaînes de caractères en C : tableaux de char terminés par '\0', chaîne littérale en lecture seule vs tableau modifiable, et représentation mémoire.

Contrairement à la majorité des langages modernes (Python, Java, C#) qui disposent d'un type d'objet natif string, le langage C ne possède aucun type primitif pour les chaînes de caractères.

En C, une chaîne de texte est simplement un tableau de caractères (char[]) qui se termine obligatoirement par un caractère spécial nul : '\0' (code ASCII 0). Ce caractère invisible est la borne sentinelle qui indique à toutes les fonctions de la bibliothèque standard où s'arrête la chaîne dans la mémoire vive.


1. La règle d'or du caractère sentinelle '\0'#

Pour stocker un mot de 5 lettres comme "BONJOUR", vous devez impérativement allouer un tableau d'au moins 8 cases (7 lettres + le caractère '\0') :

flowchart LR
    subgraph Memoire [Mémoire RAM pour char mot[] = "BONJOUR"]
        C0["mot[0]\n'B' (66)"] --- C1["mot[1]\n'O' (79)"]
        C1 --- C2["mot[2]\n'N' (78)"]
        C2 --- C3["mot[3]\n'J' (74)"]
        C3 --- C4["mot[4]\n'O' (79)"]
        C4 --- C5["mot[5]\n'U' (85)"]
        C5 --- C6["mot[6]\n'R' (82)"]
        C6 --- C7["mot[7]\n'\\0' (0)\nSENTINELLE"]
    end

[!WARNING] Si une chaîne perd son caractère de terminaison '\0', les fonctions d'affichage (printf("%s")) et de calcul de longueur (strlen()) continueront à lire les octets suivants de la mémoire RAM jusqu'à trouver un octet nul par hasard, provoquant l'affichage de caractères parasites aléatoires ou un crash de segmentation !


2. Littéral de chaîne vs Tableau de caractères modifiable#

Il existe une distinction capitale en C entre une chaîne littérale et un tableau modifiable :

1. Tableau de caractères modifiable sur la pile#

char nom[] = "AlgoJungle";
// Le compilateur alloue 11 octets sur la pile d'exécution.
nom[0] = 'a'; // PARFAITEMENT VALIDE : on peut modifier chaque lettre

2. Pointeur vers une constante littérale en mémoire texte#

const char *message = "AlgoJungle";
// "AlgoJungle" est stocké dans la zone mémoire .rodata (lecture seule du binaire).
// message[0] = 'a'; // CRASH IMMÉDIAT (Segmentation Fault) si on tente d'écrire !

[!TIP] Lorsque vous déclarez un pointeur vers une chaîne littérale entre guillemets, préfixez-le systématiquement du mot-clé const (const char *str = "texte";) pour que le compilateur vous avertisse dès la compilation si vous tentez accidentellement de modifier son contenu.


Sommaire de la Partie 6#

  1. Entrées et Sorties de chaînes : fgets(), printf() et puts()
  2. Manipulations avec la bibliothèque <string.h> (strlen, strcpy, strcmp, strcat)
  3. Applications pratiques : Palindromes, Analyseur de texte et Chiffrement

Découvrons dans le chapitre suivant comment saisir et afficher des chaînes de texte de façon sécurisée.

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue