Participer au site avec un Tip
Rechercher
 

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 :

Fonction strcpy

La fonction strcoll La fonction strcspn


Entête à inclure

#include <string.h>  // <cstring> en C++

Fonction strcpy

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é.

Il est important de noter que strcpy est considérée comme une fonction dangereuse, car elle peut causer des débordements de mémoire si la taille de la destination est insuffisante pour accueillir la source. Il est préférable d'utiliser strncpy pour éviter ce problème.

Paramètres

Valeur de retour

La fonction renvoie l'adresse de la chaîne dupliquée : cela peut permettre de cascader un appel à strcpy, avec un appel à strcat.

Exemple de code

#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;
}

Sujets connexes

malloc
strcat
strcmp
strlen


La fonction strcoll La fonction strcspn