La taille d'une chaîne
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 1 — Le langage C
É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à.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.