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 :
strlenest 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 demalloc(strlen(s) + 1)produit un tableau où la sentinelle ne tient pas, etstrcpyécrira une case au-delà.
Exercices semblables
- Lire un type corrigé
- Un dépassement qui ne dit rien corrigé
- Passage par valeur corrigé
- Lire une déclaration corrigé
- Problème — Une chaîne sûre corrigé