TD5 Algo Rappels Chaines C
TD5 Algo Rappels Chaines C
TD5 Algo Rappels Chaines C
Attention ! : c’est à vous de vérifier que la chaîne constante ne soit pas trop grande : sa
longueur doit être inférieure ou égale à LONGUEUR_MAX_CHAINE. La plupart des compilateurs
C ne font pas ce genre de vérification.
Remarque 1 : une chaîne constante est automatiquement terminée par le caractère de fin
de chaîne (‘\0’). Vous n’avez pas à le rajouter.
Remarque 2 : ce qui est possible à l’initialisation ne sera pas possible ensuite (cf. § 4) :
l’instruction chaine = "hello"; sera refusée par le compilateur.
Remarque importante : notez bien que ces trois fonctions rajoutent automatiquement le
caractère ‘\0’ à la fin de la chaîne saisie.
L’affichage d’une chaîne de caractères peut se faire avec les fonctions printf ou puts :
la fonction printf pour afficher une chaîne. Ex :
printf ( "%s", chaine );
En général, on ajoute une « partie fixe » pour améliorer la lisibilité à l’écran. Ex :
printf ( "Ma chaine : %s\n", chaine );
la fonction puts. Elle permet d’afficher directement une chaîne, en y ajoutant
automatiquement le retour à la ligne (‘\n’). Ex :
puts ( chaine );
Lequel de ces entêtes choisir ? En fait, et c’est une difficulté du langage C, les trois entêtes
seront traduits de la même façon par le compilateur : en un pointeur contenant l’adresse du
début de chaîne.
Cependant la première écriture (chaine[10]) est à éviter, car la taille indiquée n’est
absolument pas vérifiée par le compilateur (on pourrait mettre n’importe quelle taille, même
si elle ne correspond pas à la taille de la chaîne passée effectivement en argument).
La seconde écriture (chaine[]) a le mérite de rappeler au programmeur que la fonction doit
traiter un tableau, tout en étant conscient qu’à cet endroit le compilateur voit simplement une
adresse.
La troisième écriture ( *chaine) est conforme à ce que le compilateur voit : une adresse.
C’est au programmeur de savoir ce qu’il doit (et peut) faire avec cette adresse. C’est de cette
façon que les fonctions standard déclarent une chaîne de caractères dans leur entête.
Remarque 1 : quel que soit l’entête, on pourra utiliser l’écriture indicée pour accéder à un
élément de la chaîne. Ex :
chaine[1] = 'a';
Remarque 2 : la chaîne étant passée « par adresse » à la fonction, toute modification d’un
ou plusieurs caractères sera définitive, même une fois sorti de la fonction. Par contre,
attention ! la chaîne ne devra pas être redimensionnée à une taille supérieure à sa taille
initiale (à la déclaration). Ex (code complet) :
#include <stdio.h>
#include <string.h>
#define LONGUEUR_MAX_CHAINE 20
// Programme principal
int main() {
char tab[LONGUEUR_MAX_CHAINE+1];
strcpy ( tab, "hello" );
concat ( tab );
printf("%s\n", tab ); // affichera hello world
modif ( tab );
printf("%s\n", tab ); // affichera hallo world
return 0;
}