Utilisation de strcpy()
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 16 sur 63.
Vous avez appris comment trouver la longueur des chaînes de caractères avec strlen(), mais que faire si vous avez besoin de copier le contenu d'une chaîne dans une autre ? En C, vous ne pouvez pas utiliser l'opérateur d'affectation (=) pour copier des chaînes comme vous le feriez avec des variables ordinaires.
La raison est que les chaînes de caractères sont des tableaux de caractères, et quand vous utilisez = avec des tableaux, vous ne copiez que l'adresse mémoire, pas le contenu réel. C'est là que la fonction strcpy() de la bibliothèque <string.h> devient essentielle.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copie "Hello" dans destinationLa fonction strcpy() prend deux arguments : le tableau de destination (vers lequel vous voulez copier) et la chaîne source (ce que vous voulez copier). Elle copie chaque caractère de la source vers la destination, y compris le caractère de fin de chaîne nul (null terminator).
Il est crucial que votre tableau de destination soit assez grand pour contenir l'intégralité de la chaîne source plus le terminateur nul. Si la destination est trop petite, strcpy() écrira au-delà des limites du tableau, provoquant un comportement indéfini.
Cette fonction est fondamentale pour la manipulation de chaînes de caractères en C, vous permettant de dupliquer des chaînes, d'initialiser des variables de chaîne avec un contenu existant et de préparer des chaînes pour un traitement ultérieur.
Défi
FacileÉcrivez un programme C qui démontre la copie de chaînes de caractères à l'aide de la fonction strcpy(). Votre programme doit :
- Lire un entier
nreprésentant le nombre d'opérations sur les chaînes à effectuer - Pour chaque opération :
- Lire une chaîne source à partir de l'entrée
- Déclarer un tableau de caractères nommé
destinationavec 100 éléments - Utiliser
strcpy()pour copier la chaîne source dans le tableau de destination - Afficher à la fois la chaîne source originale et la chaîne de destination copiée
- Après toutes les opérations, démontrer que les chaînes copiées sont indépendantes en :
- Modifiant le premier caractère du dernier tableau de destination par 'X'
- Affichant la chaîne de destination modifiée pour montrer qu'elle a changé
N'oubliez pas d'inclure l'en-tête <string.h> pour utiliser la fonction strcpy().
Votre sortie doit afficher les résultats au format suivant :
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]Par exemple, si l'entrée est :
3
hello
world
programmingVotre sortie devrait être :
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingCe défi teste votre compréhension de l'utilisation de strcpy() pour copier le contenu d'une chaîne d'un tableau de caractères à un autre, l'allocation mémoire appropriée pour les tableaux de destination, et démontre que les chaînes copiées sont indépendantes de leurs sources.
Aide-mémoire
Pour copier des chaînes de caractères en C, utilisez strcpy() de la bibliothèque <string.h>. Vous ne pouvez pas utiliser l'opérateur d'affectation (=) pour copier des chaînes car il ne copie que les adresses mémoire, pas le contenu réel.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copie "Hello" dans destinationLa fonction strcpy() prend deux arguments : le tableau de destination (où vous voulez copier) et la chaîne source (ce que vous voulez copier). Elle copie chaque caractère de la source vers la destination, y compris le terminateur nul.
Le tableau de destination doit être suffisamment grand pour contenir l'intégralité de la chaîne source plus le terminateur nul afin d'éviter un comportement indéfini.
Essayez vous-même
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO : Écrivez votre code ici
// Utilisez une boucle pour traiter n opérations sur les chaînes
// Pour chaque opération :
// - Lire la chaîne source
// - Utiliser strcpy() pour copier la source vers la destination
// - Afficher les deux chaînes dans le format requis
// TODO : Après la boucle, modifiez le premier caractère de la dernière destination
// et affichez la chaîne modifiée
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes