Fonction strcat

Entête à inclure

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

Fonction strcat

char * strcat( char * destination, const char * source );

Cette fonction permet de rajouter à une chaîne de caractère 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ée de manière à être suffisament grande pour contenir la totalité des deux textes.

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

  • destination : permet de spécifier l'adresse de la chaîne de caractère à laquelle doit être concaténé le contenu de l'autre. Vous devez avoir pré-alloué ce bloc de mémoire avec la taille suffisante pour recevoir la cacaténation des deux. Cette allocation pourra être réalisée via la fonction malloc.
  • source : permet de définir l'adresse de la chaîne de caractères à concaténer.

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

Sujets connexes

malloc
strcmp
strcpy
strlen