Définition
● Une chaîne de caractères est un tableau de char contenant un caractère nul. Le caractère nul a 0 pour code ASCII et s'écrit '\0'.
● Les valeurs significatives de la chaîne de caractères sont toutes celles placées avant le caractère nul.
● On remarque donc que si le caractère nul est en première position, on a une chaine de caractères vide.
Déclaration
● Comme une chaîne de caractères est un tableau de char, on le déclare:
char <nom_chaine>[<taille_chaine>];● Par exemple, on déclare une chaine c de 200 caractères de la sorte: char c[200];
● Le nombre maximal de lettres qu'il sera possible de placer dans c ne sera certainement pas 200 mais 199, car il faut placer après le dernier caractère de la chaîne un caractère nul.
Initialisation
● On initialise une chaîne a la déclaration, et seulement a la déclaration de la sorte:
char <nom_chaine>[<taille_chaine>] = <valeur_initialisation>;● Ou la valeur d'initialisation contient la juxtaposition de caractères formant la chaîne entourée de guillemets ("").
- ● Exemple:
- char c[] = "bonjour" ← →
- char c[] = {'b','o','n','j','o','u','r','\0'}(taille alculée par le compilateur)
Accès aux éléments
● Du fait qu'une chaine de caractère est un tableau, il est aisé d'en isoler un élément. On teste donc si le premier caractère de c est une majuscule de la sorte:
- if(c[0] >= 'A' && c[0] <= 'Z')
- printf("Cette phrase commence par une majuscule \n");
- else
- printf ("Cette phrase ne commence pas par une majuscule \n");
● Cette propriété permet aussi d'afficher une chaîne de caractère par caractère:
- int i = 0;
- while (c[i] != 0)
- printf ("%c" , c [i++]);
#include <stdio.h>
void main()
{
Affichage avec "puts"
● puts écrit la chaîne de caractères désignée par <Chaîne> sur stdout et provoque un retour à la ligne.
● En pratique, puts(TXT); est équivalent à printf("%s\n", TXT);
Saisie avec "gets"
● Tout débordement d'indice et/ou absence de caractère nul peut donner lieu a des bugs difficiles a trouver
#include <stdio.h>
#define N 20
void main()
{
"fgets" au lieu de "gets"
fgets(<chaine>, <taille>, stdin);● La taille de la chaîne saisie est limitée par <taille>, caractèe nul compris. Le résultat est placé dans <chaine>.
● Tous les caractères supplémentaires saisis par l'utilisateur ne sont pas placés dans <chaine>,seuls les (<taille>-1) premiers caractères sont récupérés par fgets. Nous saisirons donc la phrase de notre programme de la sorte : fgets(c , 200 , stdin);
Saisie avec scanf
● scanf avec le spécificateur %s permet de lire un mot isolé à l'intérieur d'une suite de données du même ou d'un autre type.
● scanf avec le spécificateur %s lit un mot du fichier d'entrée standard stdin et le mémorise à l'adresse qui est associée à %s.
- ● La fonction scanf a besoin des adresses de ses arguments:
- * Les noms des variables numériques (int, char, long, float, ...) doivent être marqués par le symbole '&'.
- * Comme le nom d'une chaîne de caractères est le représentant de l'adresse du premier caractère de la chaîne, il ne doit pas être précédé de l'opérateur adresse '&'.
- * L'utilisation de scanf pour la lecture de chaînes de caractères est seulement conseillée si on est forcé de lire un nombre fixé de mots en une fois.