1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/**
* @brief Concatène deux chaines de caractères
* @param[in] str1 Première chaine à concaténer
* @param[in] str2 Seconde chaine à concaténer
* @return Une chaine de caractères contenant le resultat de la concaténation de str1 et str2
*
* Attention, après utilisation de cette fonction, libérer le résultat obtenu si != NULL
*/
char * concat( const char * str1, const char * str2 ) {
/* Taille de la première chaîne */
int size_of_str1 = ( str1 ? strlen( str1 ) : 0 );
/* Taille de la seconde chaîne */
int size_of_str2 = ( str2 ? strlen( str2 ) : 0 );
/* Pointeur qui récupèrera le résultat de la concaténation */
char * result = NULL;
/*
* Il faut au minimum l'une des deux chaînes de caractères
* pour opérer une concaténation.
*/
if( NULL != str1 || NULL != str2 ) {
/*
* Allocation de la mémoire pour concaténer les deux chaînes de caractères.
* La taille de la nouvelle chaîne de caractères est le résultat de l'addition
* de la taille des deux chaines et de 1 ( taille nécessaire pour le 0 terminal.
* */
result = ( char * ) malloc( sizeof( char ) * ( size_of_str1 + size_of_str2 + 1 ));
if( NULL != result ) {
/*
* La zone mémoire qui sera la résultat de la concaténation a été allouée correctement.
*/
if( NULL != str1 ) {
/* Concaténation de la première chaine */
strcat( result, str1 );
}
if( NULL != str2 ) {
/* Concaténation de la seconde chaine */
strcat( result, str2 );
}
}
}
/*
* On retourne le résultat de la concaténation
*/
return result;
}
void test_concat( FILE * output, const char * str1, const char * str2 ) {
char * result = 0;
if( str1 ) {
fprintf( output, "str1: %s\n", str1 );
fprintf( output, "taille de str1: %d\n", strlen( str1 ));
}
if( str2 ) {
fprintf( output, "str2: %s\n", str2 );
fprintf( output, "taille de str2: %d\n", strlen( str2 ));
}
result = concat( str1, str2 );
if( result ) {
fprintf( output, "result: %s\n", result );
fprintf( output, "taille de result: %d\n", strlen( result ) );
free( result );
}
}
int main( int argc, char ** argv ) {
test_concat( stdout, 0, 0 );
test_concat( stdout, "bon", "jour" );
test_concat( stdout, 0, "jour");
test_concat( stdout, "bon", 0 );
return 0;
} |
Partager