4.10. Les chaînes de caractères : pointeurs et tableaux à la fois !
On a vu dans le premier chapitre que les chaînes de caractères n'existaient pas
en C/C++. Ce sont en réalité des tableaux de caractères dont le dernier caractère est le caractère nul.
Cela a plusieurs conséquences. La première, c'est que les chaînes de caractères
sont aussi des pointeurs sur des caractères, ce qui se traduit dans la syntaxe de la déclaration
d'une chaîne de caractères constante :
const char *identificateur = "chaîne";
identificateur est déclaré ici comme étant un pointeur
de caractère, puis il est initialisé avec l'adresse de la chaîne de caractères constante
"chaîne".
La deuxième est le fait qu'on ne peut pas faire, comme en Pascal, des affectations
de chaînes de caractères, ni des comparaisons. Par exemple, si « nom1 »
et « nom2 » sont des chaînes de caractères, l'opération :
n'est pas l'affectation du contenu de
nom2 à
nom1. C'est
une affectation de pointeur : le pointeur
nom1 est égal au pointeur
nom2 et pointent sur
la même chaîne !
Une modification de la chaîne pointée par
nom1 entraîne donc la modification
de la chaîne pointée par
nom2...
De même, le test nom1==nom2 est un test entre pointeurs,
pas entre chaînes de caractères. Même si deux chaînes sont égales, le test sera faux si elles ne sont
pas au même emplacement mémoire.
Il existe dans la bibliothèque C de nombreuses fonctions permettant de manipuler
les chaînes de caractères. Par exemple, la copie d'une chaîne de caractères dans une autre se fera
avec les fonctions strcpy et strncpy, la comparaison
de deux chaînes de caractères pourra être réalisée à l'aide des fonctions strcmp
et strncmp, et la détermination de la longueur d'une chaîne de caractères à l'aide
de la fonction strlen. Je vous invite à consulter la documentation de votre environnement
de développement ou la bibliographie pour découvrir toutes les fonctions de manipulation
des chaînes de caractères. Nous en verrons un exemple d'utilisation dans la section suivante.