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 strcat

La fonction memset La fonction strchr


Entête à inclure

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

Fonction strcat

char * strcat( char * destination, const char * source );                       // Avant C99
char * strcat( char * restrict destination, const char * restrict source );     // A partir de C99

Cette fonction permet de rajouter à une chaîne de caractères déjà existante le contenu d'une seconde. Autrement dit de concaténer les contenu de deux chaînes de caractères, mais le résultat sera stocké dans la première chaîne passé en paramètre (aucune nouvelle chaîne ne sera produite). Bien entendu le bloc de mémoire devant recevoir le contenu à concaténer doit être alloué de manière à être suffisament grand pour contenir la totalité des deux chaînes caractères.

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 strcat copiera chaque caractère, un à un, à la suite du contenu de la première chaîne et ce jusqu'à atteindre ce fameux code ASCII nul. Au passage, il sera lui aussi copié.

Paramètres

Valeur de retour

La fonction renvoie l'adresse de la chaîne résultante de la concaténation : cela peut permettre de cascader plusieurs appels à la fonction strcat.

Exemple de code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Just for information : 
char * mystrcat( char * destination, const char * source ) {
    char * returnValue = destination;
    while( *destination ) ++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 EXIT_SUCCESS;
}

Sujets connexes

malloc
strcmp
strcpy
strlen
strncat


La fonction memset La fonction strchr