Guide pour les chaînes de caractères en C : Un guide pour les débutants

Bonjour là-bas, futurs programmeurs ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde des chaînes de caractères en C. Ne vous inquiétez pas si vous êtes complètement nouveau à la programmation - je serai votre guide amical, et nous avancerons pas à pas. À la fin de ce tutoriel, vous serez capable de manipuler les chaînes de caractères en C comme un pro !

C - Strings

Qu'est-ce que les chaînes de caractères en C ?

Commençons par les bases. En C, une chaîne de caractères est essentiellement une séquence de caractères. Pensez-y comme une chaîne de perles, où chaque perle est un caractère. Ces caractères sont stockés dans des emplacements de mémoire contigus, se terminant par un caractère spécial appelé le caractère nul ('\0').

Voici un fait amusant : en C, il n'y a pas de type de données distinct pour les chaînes de caractères. À la place, nous utilisons un tableau de caractères pour représenter une chaîne. C'est comme utiliser une rangée de boîtes aux lettres pour stocker une série de lettres !

Créer une chaîne de caractères en C

Maintenant, mettons les mains dans le cambouis et créons notre première chaîne en C. Il y a plusieurs façons de faire cela, mais nous allons commencer avec la méthode la plus directe :

char salutation[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Dans cet exemple, nous avons créé une chaîne appelée salutation qui contient le mot "Hello". Décomposons-le :

  • char est le type de données pour les caractères.
  • salutation est le nom de notre chaîne.
  • [6] spécifie la taille de notre tableau. Nous avons besoin de 6 espaces : 5 pour "Hello" et 1 pour le caractère nul.
  • Les caractères sont entourés de guillemets simples et séparés par des virgules.
  • N'oubliez pas le caractère nul '\0' à la fin !

Initialiser une chaîne sans spécifier la taille

C est plutôt intelligent et peut déterminer la taille de la chaîne pour nous. Regardez ceci :

char salutation[] = "Hello";

C'est génial, non ? C ajoute automatiquement le caractère nul et calcule la taille. C'est comme de la magie, mais c'est juste C qui est efficace !

Parcourir une chaîne

Maintenant que nous avons une chaîne, apprenons à la parcourir. Cela est utile lorsque vous souhaitez traiter chaque caractère individuellement :

#include <stdio.h>

int main() {
char salutation[] = "Hello";
int i = 0;

while (salutation[i] != '\0') {
printf("%c", salutation[i]);
i++;
}

return 0;
}

Ce code affiche chaque caractère de "Hello" un par un. La boucle continue jusqu'à ce qu'elle atteigne le caractère nul, qui signale la fin de la chaîne.

Afficher une chaîne (en utilisant le spécificateur de format %s)

Parcourir une chaîne caractère par caractère est amusant, mais il y a une manière plus simple d'afficher les chaînes :

#include <stdio.h>

int main() {
char salutation[] = "Hello, World!";
printf("%s", salutation);
return 0;
}

Le spécificateur de format %s indique à printf qu'il doit s'attendre à une chaîne. C'est comme donner un heads-up à printf : "Hey, une chaîne arrive dans ta direction !"

Construire une chaîne en utilisant des guillemets doubles

Souvenez-vous de notre premier exemple où nous avons créé une chaîne caractère par caractère ? Eh bien, il y a une astuce :

char salutation[] = "Hello, World!";

Cela fait la même chose que notre exemple précédent, mais c'est beaucoup plus concis. C s'occupe d'ajouter le caractère nul pour nous. C'est comme commander une chaîne pré-entoilée au lieu de la monter soi-même !

Entrée de chaîne en utilisant scanf()

Maintenant, rendons notre programme interactif en obtenant de l'entrée de l'utilisateur :

#include <stdio.h>

int main() {
char nom[50];
printf("Entrez votre nom : ");
scanf("%s", nom);
printf("Bonjour, %s!\n", nom);
return 0;
}

Ici, nous utilisons scanf() pour lire une chaîne de l'utilisateur. Mais attention ! scanf() arrête de lire à la première occurrence d'un espace. Ainsi, si vous entrez "John Doe", seul "John" sera stocké dans nom.

Entrée de chaîne avec des espaces

Pour lire une chaîne avec des espaces, nous pouvons utiliser le spécificateur de format suivant avec scanf() :

#include <stdio.h>

int main() {
char nomComplet[100];
printf("Entrez votre nom complet : ");
scanf("%[^\n]s", nomComplet);
printf("Bonjour, %s!\n", nomComplet);
return 0;
}

Le spécificateur de format %[^\n]s indique à scanf() de lire jusqu'à ce qu'il encounter un caractère de nouvelle ligne. Cela nous permet de lire des noms complets ou des phrases avec des espaces.

Entrée de chaîne en utilisant les fonctions gets() et fgets()

Bien que gets() soit simple à utiliser, il est considéré comme non sécurisé car il ne réalise aucune vérification de bornes. À la place, utilisons la fonction plus sécurisée fgets() :

#include <stdio.h>

int main() {
char phrase[100];
printf("Entrez une phrase : ");
fgets(phrase, sizeof(phrase), stdin);
printf("Vous avez entré : %s", phrase);
return 0;
}

fgets() est plus sûr car il vous permet de spécifier le nombre maximum de caractères à lire, aidant à prévenir les dépassements de mémoire.

Affichage de chaîne en utilisant les fonctions puts() et fputs()

Enfin, regardons quelques méthodes alternatives pour afficher les chaînes :

#include <stdio.h>

int main() {
char salutation[] = "Hello, World!";
puts(salutation);  // puts() ajoute automatiquement une nouvelle ligne
fputs(salutation, stdout);  // fputs() n'ajoute pas de nouvelle ligne
return 0;
}

puts() est simple et ajoute automatiquement une nouvelle ligne, tandis que fputs() vous donne plus de contrôle sur la sortie.

Voici un tableau récapitulatif des fonctions de chaîne que nous avons couvertes :

Fonction But Exemple
scanf() Lire un input formaté scanf("%s", str);
gets() Lire une ligne (non sécurisé, éviter d'utiliser) gets(str);
fgets() Lire une ligne en toute sécurité fgets(str, size, stdin);
printf() Afficher un output formaté printf("%s", str);
puts() Afficher une chaîne avec une nouvelle ligne puts(str);
fputs() Afficher une chaîne sans une nouvelle ligne fputs(str, stdout);

Et voilà ! Vous avez maintenant fait vos premiers pas dans le monde des chaînes de caractères en C. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces concepts. Bonne programmation, et que vos chaînes de caractères soient toujours null-terminées !

Credits: Image by storyset