ok ok 
Je me suis mal exprimé. 

En fait, effectivmeent, ayant réécrit la fonction pour
qu'elle soit lisible (extraite de l'appli, ca ne
l'étais pas), j'ai oublié la somme des 2 longueur.

J'ai également volontairement omis les instruction de
copies de chaine, éétant donné que mon problème se
situe sur REALLOC. En effet c'est cette instruction
qui plante en segmentation fault. Les instruction
d'ajout de chaine ne me posent pas de problème, c'est
simplement l'assignation de la mémoire.

D'autre part, pour des choix de développement, je en
veux pas que ma fonction retourne une pointeur, mais
un int qui dira si la fonction s'est bien déroulée ou
non, a la fonct appelante. Le pointeur chaine_a
pointera sur une chaine de charactère qui aura été
modifiée dans la fonction qui nous concerne


C'est donc bien le 
realloc (chaine_a, (strlen(chain_a)+strlen(chaine_b));

qui me pose pb.


Vincent
 --- Jérôme_Martin <[EMAIL PROTECTED]> a écrit :
> 
> ----- Original Message -----
> From: "SysAdmin" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Tuesday, November 19, 2002 2:47 PM
> Subject: [Confirme] petite question C
> 
> 
> > C'es tun peu HS, quoique... très basique.
> >
> > J'essai d'écrire une fonction qui ajoute le
> contenu
> > d'une chaine de charactère a une autre.
> > Pour ce faire, je doit d'abord prendre garde a
> > réserver sufisemment d'espace mémoire (ou
> l'augmenter)
> > pour la première chaine, afin de ne pas risquer
> > d'écraser.. on ne sait quoi (voire du code).
> > J'utilise donc la fonction REALLOC. Le problème..
> > c'est que ca seg fault.
> >
> > Voici le code, et si qq avait une idée a me
> proposer,
> > ce serait gentil.
> >
> >
> > int append(char *chaine_a, char *chaine_b) {
> >         printf("taille de chaine A : %d\n",
> > strlen(chaine_a));
> >         printf("taille de chaine B : %d\n",
> > strlen(chaine_b));
> >
> >         realloc(chaine_a, strlen(chaine_b));
> >         printf("Voici c'est fait!\n");
> > }
> >
> >
> > Merci de votre aide
> 
> realloc réalloue une zone mémoire, il n'ajouter pas
> à la fin. Donc premier
> point:
> realloc (chaine_a,
> strlen(chaine_a)+strlen(chaine_b))
> 
> en plus la copie n'est pas faite donc ta chaine qui
> a maintenant la bonne
> taille n'est pas remplie. Ca veux dire que
> l'affichage parcours toutes les
> caractères de ton tableau jusqu'au car '\0'. Comme
> ton tableau contient a
> priori du n'importe quoi, il peux ne pas trouver le
> fameux '\0' dans la zone
> allouée et aller taper dans une autre zone. Donc
> 
> Voici comment j'écrirais la fonction (comme ça, sans
> tester)
> char * append(char *chaine_a, char *chaine_b)
> {
>     int sa = strlen(chaine_a);
>     int sab= strlen(chaine_b);
> 
> char * ptr = malloc ((sa+sb)*sizeof(char *));    /*
> Allocation de la chaine
> */
> memcopy(ptr, chaine_a, sa);        /* Copie de la
> chaine de b */
> memcopy(ptr+sa, chaine_b, sb);        /* Copie a la
> suite de la chaine de b
> */
> return ptr;
> }
> 
> 
> > Vous souhaitez acquerir votre Pack ou des Services
> MandrakeSoft?
> Rendez-vous sur "http://www.mandrakestore.com";
>  

___________________________________________________________
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !
Yahoo! Mail : http://fr.mail.yahoo.com

Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com";

Répondre à