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 78 79
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void decoupe_chaine( char const * const chaine_a_decouper , char *** const p_tableau_chaines , int * const p_nombre_decoupes , int const taille_chaine_coupee)
{
char * position_courante = (char *) chaine_a_decouper ;
int nombre_decoupes = 0;
char ** tableau_chaines = NULL;
while ( *position_courante != '\0' )
{
char ** pointeur_realloc ;
char * chaine_destination;
int taille_chaine;
chaine_destination = malloc( taille_chaine_coupee + 1 );
if ( chaine_destination == NULL )
break;
pointeur_realloc = realloc( tableau_chaines , sizeof *pointeur_realloc * (nombre_decoupes + 1) );
if ( pointeur_realloc == NULL )
{
free( chaine_destination );
break;
}
tableau_chaines = pointeur_realloc ;
strncpy( chaine_destination , position_courante , taille_chaine_coupee );
chaine_destination[taille_chaine_coupee] = '\0';
taille_chaine = strlen( chaine_destination );
tableau_chaines[nombre_decoupes] = chaine_destination;
position_courante += taille_chaine ;
nombre_decoupes++;
}
*p_tableau_chaines = tableau_chaines;
*p_nombre_decoupes = nombre_decoupes;
}
void affiche_chaines( char const * const chaine_a_decouper , char * const * const tableau_chaines , int const nombre_decoupes )
{
int a;
printf( "Chaine non coupee : %s\n\n" , chaine_a_decouper );
printf( "Il y a %d chaines coupees :\n" , nombre_decoupes );
for ( a = 0 ; a < nombre_decoupes ; a++)
printf( "%s\n" , tableau_chaines[a] );
}
void nettoye_memoire ( char *** const p_tableau_chaines , int * const p_nombre_decoupes )
{
int a;
for ( a = 0 ; a < *p_nombre_decoupes ; a++)
free( (*p_tableau_chaines)[a] );
free( *p_tableau_chaines );
*p_nombre_decoupes = 0 ;
*p_tableau_chaines = NULL;
}
int main(void)
{
int nombre_decoupes = 0;
char ** tableau_chaines = NULL;
char chaine_a_decouper[40] = "157FE7A3560FAB334CF";
decoupe_chaine( chaine_a_decouper , &tableau_chaines , &nombre_decoupes , 10 );
affiche_chaines( chaine_a_decouper , tableau_chaines , nombre_decoupes );
nettoye_memoire( &tableau_chaines , &nombre_decoupes );
return 0;
} |
Partager