#include <string.h> // <cstring> en C++
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é.
malloc
.
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
.
#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; }
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 :