Adloun

informatique (MP2I/MPI) · Chapitre 1 · Application directe du cours

La taille d'une chaîne

Le langage C · niveau 2

Énoncé

Combien de cases occupe char mot[] = "informatique"; ? Que vaut strlen(mot) ? Pourquoi les deux nombres diffèrent-ils ?

Corrigé

Le mot informatique compte lettres. Le tableau occupe donc 13 cases : les douze lettres et la sentinelle '\0'. Et strlen(mot) vaut 12 : elle compte les caractères avant la sentinelle.

La différence est le fondement des chaînes en C. Aucune structure ne retient la longueur : elle se déduit de la position du '\0'. Deux conséquences :

  • strlen est en — elle parcourt. On ne l'appelle jamais dans la condition d'une boucle.
  • Une case oubliée à l'allocation est la faute classique : malloc(strlen(s)) au lieu de malloc(strlen(s) + 1) produit un tableau où la sentinelle ne tient pas, et strcpy écrira une case au-delà.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre