#include <string.h> // <cstring> en C++
char * strcpy( char * destination, const char * source ); // Avant C99 char * strcpy( char * restrict destination, const char * restrict source ); // A partir de C99
Cette fonction permet de copier le contenu d'une chaîne de caractères dans une autre. Bien entendu, la chaîne de caractère devant recevoir le contenu de l'autre doit être allouée de manière à être suffisament grande pour contenir tout le texte et les deux chaînes ne doivent pas se chevaucher.
En langage C, les chaînes de caractères sont qualifiées d'AZT : A Zéro Terminal. Cela signifie qu'une chaîne de caractères se termine forcément
par un code ASCII nul (pouvant aussi être représenté par '\0'
). La fonction strcpy
copiera chaque caractère, un à un,
jusqu'à atteindre ce fameux code ASCII nul. Au passage, il sera lui aussi copié.
malloc
.
La fonction renvoie l'adresse de la chaîne dupliquée : cela peut permettre de cascader un appel à strcpy
, avec un appel à strcat
.
#include <stdio.h> #include <stdlib.h> #include <string.h> /* Just for information : char * mystrcpy( char * destination, const char * source ) { char * returnValue = destination; while( *destination++ = *source++ ); return returnValue; } */ int main() { char * firstName = (char *) malloc( 40 ); char * lastName = (char *) malloc( 40 ); char * fullName; size_t fullSize; printf( "Please, enter your first name: " ); scanf( "%s", firstName ); printf( "Enter your last name: " ); scanf( "%s", lastName ); /* The last +1 is for the last nul ASCII code for the string */ fullSize = strlen( firstName ) + 1 + strlen( lastName ) + 1; /* Memory allocation and copy */ fullName = (char *) malloc( fullSize ); strcpy( fullName, firstName ); strcat( fullName, " " ); strcat( fullName, lastName ); /* You can also write : strcat( strcat( strcpy( fullName, firstName ), " " ), lastName ); */ printf( "Full name is: %s\n", fullName ); free( fullName ); free( lastName ); free( firstName ); return 0; }
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :