Les chaines de caractères
À partir d'ici nous allons enfin pouvoir commencer à manipuler du texte
J'ai préféré ne pas vous montrer comment manipuler du texte tout de suite comme les nombres car c'est "légèrement" plus difficile et vous n'aviez pas les connaissances adaptées
Mais maintenant vous voilà près! Nous allons tout d'abord voir comment créer une chaine de caractère, comment cela fonctionne, en demander une à l'utilisateur, puis enfin découvrir quelques fonctions qui permettront de manipuler ces chaînes plus facilement

Here we go!
Créer une chaine de caractères
Nous avions vu, il y a déjà quelque temps, comment créer une variable pouvant contenir une lettre. Il fallait écrire ceci:
char variable
= 'A';
Jusque là, rien de nouveau.

Mais ce n'est pas un hasard si nous avons vu les tableaux juste avant ce chapitre, car en fait
:
une chaine de caractère n'est qu'un tableau de char
Ce qui veut dire que comme char sert à stocker des lettres, une chaine de caractères sera un tableau de lettres.
Voici donc un exemple:
char variable
[10]; //On créer un tableau de 10 char.
//On met dans chaque case du tableau une lettre.
variable
[0] = 'C';
variable
[1] = 'r';
variable
[2] = 'e';
variable
[3] = 'a';
variable
[4] = 'n';
variable
[5] = 'e';
variable
[6] = 't';
En réalité, ceci n'est qu'à moitié correcte, car pour que l'ordinateur sache quand la chaine s'arrête, il faut placer un antislash suivi d'un zero

(remarquez que ce signe est considéré comme un seul et unique caractère comme n'importe quel autre signe).
Il faut donc écrire pour que cela soit correct:
char variable
[10]; //On créer un tableau de 10 char.
//On met dans chaque case du tableau une lettre.
variable
[0] = 'C';
variable
[1] = 'r';
variable
[2] = 'e';
variable
[3] = 'a';
variable
[4] = 'n';
variable
[5] = 'e';
variable
[6] = 't';
variable
[7] = '
';
Pour afficher le texte, il suffit d'écrire:
printf
("%s", variable
);
Ce qui donne bien:
Vous avez réussi à afficher du texte! Bon on savait déjà le faire OK :P
Maintenant écrivez ceci:
char variable
[10] = "Creanet";
et afficher la variable à l'aide de printf ... Cela revient strictement au même!
Donc lors de la déclaration d'une variable de type char, si vous souhaitez placer du texte dedans en utilisant les tableaux, vous pouvez marquer directement le texte comme je viens de vous le montrer plutôt qu'un fastidieux:
variable
[0] = 'C';
variable
[1] = 'r';
variable
[2] = 'e';
variable
[3] = 'a';
..................
Mais je vous le rappelle:
Cela ne marche que pour l'initialisation de la variable!
De plus, vous pouvez écrire ceci à l'initialisation:
char variable
[] = "Creanet";
La taille du tableau est calculée automatiquement et même le caractère de fin de chaine est pris en compte
Elle n'est pas belle la vie?
Voyons maintenant comment demander à l'utilisateur une chaine de caractère.
Saisie d'une chaine de caractères
Tout simplement comme ceci:
char votreChaine
[10];
scanf
("%s", votreChaine
); /*Ne mettez pas le signe '&' devant un tableau de type char! Le prochain chapitre rendera cela plus clair
*/
et voilà, ce que l'utilisateur à rentré est maintenant stocké dans le variable "votreChaine"
Attention
Si l'utilisateur rentre plus de texte que de cases possibles dans votre tableau le programme va planter (buffer overflow pour ceux qui connaissent
). Il est donc impératif de bien prendre une taille de tableau en conséquence.
Les limites de scanf
Scanf est, certes, assez simple à utiliser mais pose néanmoins quelques problèmes et notamment de sécurité. Comme nous le verrons dans le chapitre sur la sécurité de vos applications. Nous allons tout de même l'utiliser, mais de façon contrôlée.
Par exemple, essayez ce code qui affiche ce que l'on a rentré:
char votreChaine[10];
scanf("%s", votreChaine); //On demande une chaine.
printf("%s", votreChaine); //On affiche cette chaine.
Essayez de rentrer "Bonjour toi!" (sans les guillemets). Cela nous donne:

O.O
Oui il n'y a que le "Bonjour" d'affiché! Donc deux choses à retenir:
1) On fait attention à la taille du buffer!
2) On ne marque pas d'espace!
Nous verrons donc, comme je vous l'ai dit, dans le chapitre sur la sécurité des applications, pourquoi cela se déroule de cette façon et surtout comment l'éviter
Les différentes fonctions de gestion de chaines de caractères
Avant toute chose, il vous faut inclure une bibliothèque
Celle-ci se nomme string.h. Il faut donc écrire ceci:
#include <string.h>
Voyons maintenant les fonctions de manipulation de chaines de caractères les plus utiles
La longueur d'une chaine
Il vous sera peut être utile, parfois, de connaître la taille d'une chaine de caractères en particulier. Pour cela, il vous faut utiliser la fonction:
strlen
(votreChaine
);
Cette fonction revoie un type size_t (c'est un type créé spécialement pour cela, mais faites comme si c'était un int
)
Exemple d'utilisation:
char maVariable
[] = "Bonjour!";
printf
("maVariable contient %d caracteres", sizeof
(maVariable
));
Tout simplement
Comparer deux chaines
La fonction permettant de regarder si deux chaines sont identiques est:
strcmp
(chaine1
, chaine2
);
Cette fonction renvoie 0 si les chaines sont identiques et autre chose sinon.
On peut donc l'utiliser comme ceci:
char chaine1
[] = "Exemple";
char chaine2
[] = "Exemple";
if(strcmp
(chaine1
, chaine2
) == 0)
{
printf
("Ce sont les memes chaines!");
}
else
{
printf
("Ces chaines ne sont pas pareilles!");
}
Ecrire dans une chaine
Si vous souhaitez, par exemple, écrire dans une chaîne une phrase suivie d'une variable par exemple comme ceci:
A ok! Vous avez donc X ans!
//Où X est l'âge.
Et bien c'est possible grâce à la fonction sprintf
sprintf
(chaineDestination
, "Du texte", ...
);
chaineDestination est la chaine de caractères qui va stocker la phrase formée au complet. Veillez donc bien à sa taille
Le deuxième paramètre de cette fonction est le texte à écrire dans la variable précédemment citée. Enfin, les trois petits points ne sont pas obligatoires, ce sont des paramètres optionnels. Comme pour printf, si vous mettez dans le texte le signe "%d" et, à la place des trois petits points, une variable de type int, celle ci s'affichera dans le texte. Voici un exemple pour mieux comprendre:
char variableDestination[100];
int age = 45;
/*On forme de toutes pièces la variable variableDestination*/
sprintf(variableDestination,"Vous avez %d ans.", age);
printf("%s", variableDestination); //On affiche cette variable.
Sprintf est donc très utile pour la création de chaines de caractères
Voilà, je vous ai montré les quelques fonctions relatives aux chaines de caractères qui me semblaient utiles. Si, par la suite, nous avons besoin d'autre fonctions, je vous les indiquerais et expliquerais
Mais rien ne vous empêche d'aller de vous même voir le fichier source string.h pour voir les différentes autres chaines de caractères (attention toutefois ce fichier ne contient que les prototypes de ces fonctions et non le code des fonctions à part entière
)
Le prochain chapitre traitera des pointeurs et de la gestion des adresses
Ce ne sera pas le moment de dormir car il s'agit peut être d'un des chapitres les plus dur mais ne vous en faites pas, vous avez fais le pire si vous êtes arrivé jusqu'ici
Les tableaux Les pointeurs et la gestion des adresses