STRCPY |
Copie de chaine |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
char *strcpy(const char *dest,const char *source) |
Paramètres
Nom | Description |
---|---|
dest | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ recevant le contenu. |
source | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ à copier dans dest. |
Retour
Valeur | Description |
---|---|
chaîne de caractères | Ces valeurs permettent d'indiquer le résultat de la copie, soit un pointeur sur la destination. |
Description
Cette fonction permet d'effectuer la copie d'une chaîne de caractères dans une autre chaîne de caractères.
Remarques
- ATTENTION ! Le caractère ASCII NUL est également copié à la fin de la chaîne de caractères, car la fonction se base sur ce caractère afin de connaître la fin de la chaîne de caractères. Ainsi, il faut prévoir un caractère de plus lorsque vous effectuez une copie afin de ne pas provoquer de corruption.
- La plupart des compilateurs de langages C ne font aucune vérification tant qu'à savoir si le tampon recevant le résultat à copier est assez grand pour recevoir toutes les données. Il faudra donc s'assurer avec une fonction strlen ou un mot réservé sizeof par exemple, que vous disposez assez d'espace pour effectuer cette opération sans risquer de provoquer de la corruption de mémoire. Par contre, lors de l'exécution du programme, les systèmes d'exploitation modernes font eux-mêmes des vérifications de débordement de mémoire, il se pourrait que vous receviez une erreur à ce niveau plutôt que par le compilateur.
- Il faut éviter autant que possible que les deux chaînes de caractères se chevauchent, car la réaction peut varier fortement d'un code machine à un autre.
- Aucune vérification de la taille de destination : strcpy ne vérifie pas si destination est assez grand pour contenir source. Cela peut entraîner un dépassement de tampon (buffer overflow) et provoquer un comportement indéfini. Exemple dangereux :
- Renvoie un pointeur sur destination : La fonction retourne un pointeur vers destination, ce qui permet d'enchaîner des appels. Exemple :
Ici, res et dest pointent vers la même mémoire, ce qui peut être utile dans certaines situations.
- Peut provoquer un comportement indéfini si source et destination se chevauchent : strcpy ne gère pas correctement les cas où source et destination se chevauchent en mémoire. Exemple problématique :
- Moins sécurisé que strncpy : strncpy(destination, source, n) permet de limiter le nombre de caractères copiés. Exemple :
- Obsolète en C++ moderne : En C++, strcpy est considéré comme obsolète au profit de std::string, qui est plus sécurisé et plus pratique. Exemple équivalent en std::string :
- std::string source = "Bonjour";
- std::string destination = source;
- Consomme plus de temps que memcpy : strcpy copie caractère par caractère, ce qui peut être moins efficace que memcpy pour les grandes chaînes. memcpy fonctionne en blocs de mémoire, ce qui est souvent plus rapide mais ne s'arrête pas au \0. Exemple :
- Peut être utilisé avec malloc pour allouer dynamiquement une copie : Si vous devez copier une chaîne dans un tampon dynamique, strcpy peut être
utilisé avec malloc. Exemple :
Il faut toujours libérer la mémoire avec free(dest); après usage pour éviter les fuites mémoire.
Il est préférable d'utiliser strncpy ou std::string pour éviter ce problème.
Pour éviter cela, il est recommandé d'utiliser memmove au lieu de strcpy.
Bien que strncpy soit plus sécurisé, elle ne garantit pas toujours la terminaison par \0, donc il faut l'ajouter manuellement.
Cette approche évite les erreurs de mémoire et facilite la gestion des chaînes.
memcpy est utile si vous savez exactement combien d'octets copier.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

on obtiendra le résultat suivant :
Gladir.comVoir également
Langage de programmation - C++ - Référence de procédures et fonctions - strcat
Langage de programmation - C - Référence de procédures et fonctions - strcpy
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 734.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 255.