Chaînes de caractères en C : Maîtriser la déclaration, l'initialisation et les E/S
Chaînes de caractères en C
Ce tutoriel vous guide à travers les fondamentaux des chaînes en C : déclaration, initialisation, entrée/sortie, utilisation des fonctions, pointeurs et fonctions de bibliothèque essentielles.
En C, une chaîne est un tableau de caractères terminé par un octet nul \0. Par exemple :
char c[] = "c string";
Le compilateur ajoute automatiquement \0 à un littéral de chaîne, ce qui en fait une chaîne C correcte.

Comment déclarer une chaîne ?
Les chaînes sont déclarées comme des tableaux de caractères. Par exemple :
char s[5];

Cela déclare un tampon pouvant contenir jusqu'à 4 caractères plus le \0 terminateur.
Comment initialiser les chaînes ?
Plusieurs styles d'initialisation sont disponibles :
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};

Attention aux débordements de tampon : char c[5] = "abcde"; tente de stocker six caractères (dont \0) dans un tableau de cinq octets et doit être évité.
Assignation de valeurs aux chaînes
Les tableaux ne peuvent pas être assignés après la déclaration. Utilisez plutôt strcpy() :
char c[100];
strcpy(c, "C programming");
Note : L'assignation directe comme c = "C programming"; cause une erreur de compilation.
Lecture de chaînes depuis l'utilisateur
Utilisez scanf() pour une entrée délimitée par des espaces :
#include <stdio.h>
int main() {
char name[20];
printf("Entrez votre nom : ");
scanf("%s", name);
printf("Votre nom est %s.", name);
return 0;
}
Sortie
Entrez votre nom : Dennis Ritchie Votre nom est Dennis.
Seul le premier mot est capturé car scanf() s'arrête aux espaces blancs. Le nom du tableau se transforme en pointeur, donc name est passé directement.
Comment lire une ligne complète ?
Utilisez fgets() et puts() :
#include <stdio.h>
int main() {
char name[30];
printf("Entrez votre nom : ");
fgets(name, sizeof(name), stdin);
printf("Nom : ");
puts(name);
return 0;
}
Sortie
Entrez votre nom : Tom Hanks Nom : Tom Hanks
fgets() lit jusqu'à sizeof(name)-1 caractères, y compris les espaces. Il conserve aussi le saut de ligne final, que puts() affiche.
Note : gets() est obsolète et supprimé du standard C car il peut provoquer des débordements de tampon.
Passage de chaînes aux fonctions
Les chaînes sont passées aux fonctions comme les tableaux. Exemple :
#include <stdio.h>
void displayString(char str[]);
int main() {
char str[50];
printf("Entrez une chaîne : ");
fgets(str, sizeof(str), stdin);
displayString(str);
return 0;
}
void displayString(char str[]) {
printf("Sortie chaîne : ");
puts(str);
}
Chaînes et pointeurs
Les noms de chaînes se transforment en pointeurs, permettant l'arithmétique de pointeurs :
#include <stdio.h>
int main(void) {
char name[] = "Harry Potter";
printf("%c", *name); // H
printf("%c", *(name+1)); // a
printf("%c", *(name+7)); // o
char *namePtr = name;
printf("%c", *namePtr); // H
printf("%c", *(namePtr+1)); // a
printf("%c", *(namePtr+7)); // o
}
Fonctions de chaîne couramment utilisées
- strlen() – retourne la longueur d'une chaîne (hors terminateur nul).
- strcpy() – copie une chaîne vers une autre.
- strcmp() – compare deux chaînes lexicographiquement.
- strcat() – concatène deux chaînes.
Langue C
- Maîtriser les chaînes C# : Fondamentaux, opérations et techniques avancées
- Maîtriser les espaces de noms en C# : Organisation, portée et bonnes pratiques
- 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
- Maîtriser les fonctions de chaînes C++ : strcpy, strcat, strlen, strcmp – Exemples pratiques
- Chaînes de caractères en C simplifiées : Déclaration, entrée, sortie et fonctions de bibliothèque
- Maîtriser les opérations sur chaînes Python : Replace, Join, Split, Reverse et Conversion de casse
- Maîtriser la programmation C : Tutoriel complet pour débutants
- Classe Strings Java : Maîtriser la Création et la Manipulation de Chaînes