![]() ![]() ![]() |
|
L a n g a g e C
L e s c h a î n e s d e c a r a c t è r e s
Généralités
Une chaîne est un tableau de caractères dont le dernier élément significatif est le caractère '\0'. Il faut donc différencier la longueur maximale de la chaîne (c'est à dire la dimension donnée lors de la définition) de sa longueur réelle (c'est à dire le nombre de caractères jusqu'au premier '\0' rencontré) :
Cette déclaration définit et initialise une chaîne de caractères, ce qui s'écrit plus simplement :
La chaîne a ici une longueur maximale de 10 (9 caractères quelconques plus le '\0' final) et sa longueur effective est 7.
Pourtant chaine1 et chaine2 ne sont pas équivalentes : chaine1 est un tableau implanté à une adresse fixe. Pour changer la valeur de chaine1, il est nécessaire de modifier les caractères composant la chaîne "bonjour", chaine2 est par contre un pointeur sur une chaîne constante "bonjour", mais rien n'empêche de changer la valeur de ce pointeur par :
![]() La variable chaine2 pointe maintenant vers une nouvelle constante, aucune recopie de caractère n'a été effectuée. Les remarques faites sur les tableaux (voir opérations sur les tableaux) sont valables ici :
La fonction strcpy permet de recopier les chaînes de caractères, et résoud le problème de l'affectation d'une valeur à chaine1 :
![]() De même pour :
L'expression chaine1 == chaine2 peut être vraie ou fausse suivant que le compilateur fusionne ou non les constantes identiques (auquel cas les deux adresses sont identiques). Pour comparer le contenu de deux chaînes de caractères on utilise la fonction strcmp :
Indique dans ce cas si les chaînes sont formées des mêmes caractères. Les fonctions de traitement de chaînes de caractères de la librairie standard, généralement de la forme str...(...) , supposent que toute chaîne est terminée par '\0'. Elles font en sorte de générer des chaînes terminées par '\0' :
Tableaux de chaînes de caractères
Les tableaux de chaînes de caractères sont des tableaux de tableaux de caractères :
implémentés de cette façon : ![]() On constate que le tableau contient de l'espace inutilisé relativement important (près de la moitié). Pour minimiser la mémoire nécessaire au stockage des chaînes, on peut déclarer tab comme un tableau de pointeurs :
ce qui donne comme implémentation : ![]() Un tableau dynamique de chaînes de caractères se déclarera :
La première allocation se fera par rapport au nombre de chaînes à manipuler, et pour chacune de ces chaînes il faudra allouer un espace suffisant pour stocker les caractères :
L'erreur à ne pas commettre :
|
![]() |
![]() |
![]() |
© 2000-2025 Exood4 Studio. Tous droits réservés. |