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"