Les chaînes de caractères et le langage C
Déclaration et initialisation Il n'existe pas de type chaîne en C Une chaîne de caractères est : Un tableau de caractères Terminée par un caractère de fin : '\0'
Stockage d'une chaîne code ascii Indice Tableau tabCar 66 1 65 .. 82 Elle peut être initialisée lors de sa déclaration avec une chaîne de caractères encadrée du symbole " char tabCar[]= "BAR"; ou char tabCar[]= { 'B', 'A', 'R', '\0' }; char tabCar[]= { 66, 65, 82, 0 }; Attention !!! Une chaîne de caractères initialisée à la déclaration n'est pas modifiable par la suite.
Représentation en mémoire Déclaration et initialisation simultanée: char message[]="bonjour";// occupe en mémoire 8 octets
Déclaration Sous forme de tableau : Sous forme dynamique : char chaine[TAILLEMAX] ; // ma chaîne pourra contenir au maximum TAILLEMAX-1 caractères Sous forme dynamique : char *chaine ; // chaine ne pourra pas être utilisé avant qu'un espace mémoire ne lui soit attribué.
Chaînes dynamiques Pour pouvoir utiliser les chaînes de caractères dynamiques, il faut réserver la place nécessaire en mémoire. char *chaine ; chaine = (char *)malloc(nombreDOctets*sizeof(char)) ; Exemple : chaine = (char *)malloc(5*sizeof(char)) ; chaine pourra recevoir une chaîne de caractères de 4 caractères.
Lecture et écriture Opérations de lecture au clavier habituelle : scanf, gets Opérations d'écriture de chaîne à l'écran : printf, puts
Fonctions de manipulation de chaînes Longueur d'une chaîne : strlen Concaténation de chaînes : strcat Comparaison de chaînes : strcmp(il n'est pas possible d'utiliser les opérateurs de comparaison ==, <, >, etc ) Copie de chaînes : strcpy (il n'est pas possible d'utiliser l'opérateur d'affectation = )
Exemple d'utilisation char *nom ; char buffer[TAILLEMAX] ; Pas de symbole & Taille de la chaine saisie char *nom ; char buffer[TAILLEMAX] ; printf("donnez votre nom "); scanf("%s",buffer); nom=(char*)malloc( (strlen(buffer)+1) * sizeof(char) ) ; strcpy(nom, buffer); printf("votre nom est : %s \n",nom); free(nom); Pour le \0 Copie de la chaîne saisie dans la variable nom Libération de l'espace mémoire réservé pour nom
Exemple d'utilisation
Conclusion Pas de type chaîne, mais un type « char * » Les opérateurs classiques ne peuvent pas être utilisés (affectation, comparaison) Il faut allouer dynamiquement de la place en mémoire pour stocker une chaîne (malloc) Il faut libérer la mémoire allouée lorsqu'on en a plus besoin (free).