Chaînes de caractères en C simplifiées : Déclaration, entrée, sortie et fonctions de bibliothèque
Qu'est-ce qu'une chaîne en C ?
Une chaîne en C est une séquence contiguë de caractères terminée par le caractère nul (\0). Bien que le langage n'ait pas de type chaîne dédié, une chaîne est généralement représentée comme un tableau de valeurs char. Le compilateur ajoute automatiquement le terminateur nul lorsque vous initialisez un littéral de chaîne.
"Welcome to the world of programming!"
L'en-tête de la bibliothèque standard <string.h> offre une multitude de fonctions pour manipuler les chaînes efficacement.
Déclaration et initialisation des chaînes
Puisque le C traite une chaîne comme un tableau de caractères, vous devez spécifier la taille du tableau. La taille définit le nombre maximum de caractères (hors terminateur nul) qui peuvent être stockés.
char nom_variable_chaine[taille_tableau];
Déclarations typiques :
char first_name[15]; /* contient jusqu'à 14 caractères + \0 */
char last_name[15];
Quand vous fournissez un initialiseur, le compilateur compte les caractères et ajoute automatiquement le terminateur nul. La taille du tableau peut être omise si vous donnez un initialiseur.
char first_name[15] = "ANTHONY";
char first_name[] = "NATHAN"; /* taille déduite */
char string3[6] = {'h','e','l','l','o','\0'}; /* terminateur explicite */
Lecture des chaînes depuis l'utilisateur
Les fonctions d'entrée varient en sécurité et comportement :
scanf("%s", name)lit jusqu'à un espace blanc mais est vulnérable aux dépassements de tampon.gets()lit une ligne entière mais est dangereux et supprimé depuis C11.fgets(name, size, stdin)lit jusqu'àsize-1caractères, laissant place au terminateur nul.
Exemple utilisant fgets :
#include <stdio.h>
int main() {
char name[50];
printf("Enter your full name: ");
fgets(name, sizeof(name), stdin);
printf("Your name is %s", name);
return 0;
}
Affichage des chaînes
La façon classique d'afficher une chaîne est printf("%s", name);. Deux alternatives pratiques sont :
fputs(name, stdout)– écrit directement dans le flux de sortie.puts(name)– écrit la chaîne suivie d'un saut de ligne.
Exemple avec puts :
#include <stdio.h>
int main() {
char greeting[] = "Hello, world!";
puts(greeting);
return 0;
}
La bibliothèque de chaînes (<string.h>)
Fonctions couramment utilisées :
| Fonction | Description |
|---|---|
| strlen | Retourne la longueur d'une chaîne (hors terminateur nul). |
| strcat | Ajoute une chaîne à une autre. |
| strcmp | Compare deux chaînes lexicographiquement. |
| strcpy | Copie une chaîne. |
| strncmp | Compare jusqu'à n caractères. |
| strncpy | Copie jusqu'à n caractères. |
| strchr | Trouve la première occurrence d'un caractère. |
| strrchr | Trouve la dernière occurrence d'un caractère. |
| strstr | Trouve une sous-chaîne. |
| strncat | Concatène jusqu'à n caractères. |
| strlwr | Convertit en minuscules (non standard). |
| strupr | Convertit en majuscules (non standard). |
| strrev | Inverse une chaîne (non standard). |
Programme illustratif :
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = " World!";
char result[40];
/* Comparaison */
if (strcmp(str1, str2) == 0)
puts("Strings are equal");
else
puts("Strings are not equal");
/* Concaténation */
strcat(str1, str2); // str1 contient maintenant "Hello World!"
printf("Concatenated: %s\n", str1);
/* Longueur */
printf("Length of str1: %zu\n", strlen(str1));
/* Copie */
strcpy(result, str1);
printf("Copied string: %s\n", result);
return 0;
}
Conversion d'une chaîne en nombre
Conversions standard :
atoi– convertit enint.atof– convertit endouble.atol– convertit enlong.
Exemple avec atoi :
#include <stdio.h>
#include <stdlib.h>
int main() {
char number_str[20];
printf("Enter a number: ");
fgets(number_str, sizeof(number_str), stdin);
int num = atoi(number_str);
printf("You entered %d\n", num);
return 0;
}
Points clés à retenir
- Une chaîne est une séquence de caractères stockée dans un tableau
charterminée par \0. - Déclarez la taille du tableau avant utilisation, ou laissez le compilateur l'inférer lors de l'initialisation.
- Utilisez
fgetspour une entrée sûre ; évitezgetsetscanf("%s")sans vérification de bornes. - Exploitez
<string.h>pour des opérations robustes sur les chaînes. - Convertissez les nombres en chaîne avec
atoi,atofouatolpour éviter les erreurs d'exécution. - Rappelez-vous que les littéraux de chaîne sont en lecture seule ; les modifier entraîne un comportement indéfini.
Langue C
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les représentations en chaînes dans les enums Java
- Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
- Les tableaux en C++ : Déclaration, initialisation et techniques avec pointeurs
- Maîtriser les fonctions de chaînes C++ : strcpy, strcat, strlen, strcmp – Exemples pratiques
- Utilisation de realloc() en C : Syntaxe, bonnes pratiques et exemple
- Maîtriser la fonction free() en C : Guide pratique et exemple
- Méthode Java String length() : Comment obtenir la taille d'une chaîne (Exemple)
- Maîtriser les opérations sur chaînes Python : Replace, Join, Split, Reverse et Conversion de casse