4
#include "gestion_memoire.h"
5
#include "buffer_dynamiques.h"
6
#include "utilitaires.h"
8
#define TAILLE_INIT_TABLEAU 10
10
void liberer_tableau_de_pointeurs(tableau,taille)
15
for(compteur=0 ; compteur < taille ; compteur ++)
16
liberer(tableau[compteur]);
21
il faut que, comme avec strcat, la chaine ait la
22
place pour accepter le caractere supplementaire.
24
void concat_caractere(chaine,caractere)
28
chaine[strlen(chaine)+1]='\0';
29
chaine[strlen(chaine)]=caractere;
33
il faut que, comme avec strcat, la chaine ait la place pour
34
accepter la chaine et le caractere supplementaires
36
void strcat_plus_caractere(chaine_a_remplir,chaine_a_copier,caractere)
37
char *chaine_a_remplir;
38
char *chaine_a_copier;
41
strcat(chaine_a_remplir,chaine_a_copier);
42
concat_caractere(chaine_a_remplir,caractere);
45
static tableau_avec_taille tat_resultat;
47
tableau_avec_taille convertir_nombre_arbitraire_de_chaines_en_tableau(liste)
52
tat_resultat.taille=0;
53
tat_resultat.tableau=gbd_creer_buffer_dynamique_type(char *,TAILLE_INIT_TABLEAU,allouer,reallouer,liberer,NULL);
54
tat_resultat.tableau=gbd_augmenter_buffer_dynamique(tat_resultat.tableau,1);
56
while((chaine=va_arg(*liste,char *)) != NULL)
58
tat_resultat.tableau[tat_resultat.taille++]=dupliquer_chaine(chaine);
59
tat_resultat.tableau=gbd_augmenter_buffer_dynamique(tat_resultat.tableau,1);
61
tat_resultat.tableau[tat_resultat.taille]=NULL;
67
char *concatenation_plusieurs_chaines(va_alist)
72
char *chaine_resultat;
73
tableau_avec_taille temporaire;
81
temporaire=convertir_nombre_arbitraire_de_chaines_en_tableau(&liste);
82
for(compteur=0;compteur<temporaire.taille;compteur++)
83
nb_caracteres+=strlen(temporaire.tableau[compteur]);
85
chaine_resultat=allouer_type(char,nb_caracteres+1);
86
*chaine_resultat='\0';
87
for(compteur=0;compteur<temporaire.taille;compteur++)
88
strcat(chaine_resultat,temporaire.tableau[compteur]);
90
liberer_tableau_de_pointeurs(temporaire.tableau,temporaire.taille);
91
gbd_liberer_mixte(temporaire.tableau);
95
return chaine_resultat;
99
char *concatener_deux_chaines(chaine1,chaine2)
103
char *chaine_resultat;
104
chaine_resultat=allouer_type(char,strlen(chaine1)+strlen(chaine2)+1);
105
strcpy(chaine_resultat,chaine1);
106
strcat(chaine_resultat,chaine2);
107
return chaine_resultat;
111
char *dupliquer_chaine(chaine_source)
114
char *chaine_resultat=allouer_type(char,strlen(chaine_source)+1);
115
strcpy(chaine_resultat,chaine_source);
117
return chaine_resultat;