----- 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"