Concaténer un char à la suite d'une string

Concaténer un char à la suite d'une string - C - Programmation

Marsh Posté le 07-11-2004 à 22:00:33    

Salut tt le monde,
 
Voilà, je galère grave depuis hier soir sur un truc qui doit pourtant être simple... Je voudrais concaténer un caractère à la suite d'une string. J'ai trouvé pas mal d'exemples, fait des recherches sur le forum mais je me prends toujours des erreurs de segmentation, voilà un ptit condensé de mon code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. main()
  5. {
  6. char *myString;
  7. char myChar;
  8. char tampon[255];
  9. // allocation de la mémoire pr le mot "bonjour"
  10. myString=(char *)malloc(7+1);
  11. myString = "Bonjour";
  12. printf ("%s\n", myString);
  13. // on remplit le tampon
  14. myChar = 'x';
  15. tampon[0] = (char) myChar;
  16. tampon[1] = '\0';
  17. printf ("%s\n", tampon);
  18. // reallocation de mémoire pr la concaténation du tampon à myString
  19. myString=(char *)realloc(myString, strlen(myString) + 1 + strlen(tampon) + 1);
  20. printf ("%s\n", myString);
  21. myString = strcat(myString, tampon);
  22. printf ("%s\n", myString);
  23. }


 
le résultat :


jerome@hn-48-17:~/railway/parser> ./a.out
Bonjour
x
Erreur de segmentation
jerome@hn-48-17:~/railway/parser>


 
C'est au moment du realloc que tout part en sucette. J'ai essayé plein de différentes manières de faire (différentes tailles pr le reallocetc) mais pas moyen :/ . (à la base le caractère que je veux ajouter dans la string viens d'un fichier et cette string est dans un "tableau de strings" si on peut dire ca comme ca). Mais bon faudrait déjà que je passe ce cap là ;)
 
Merci d'avoir pris le temps de lire :)

Reply

Marsh Posté le 07-11-2004 à 22:00:33   

Reply

Marsh Posté le 07-11-2004 à 22:23:18    

C'est parce que tu utilises le meme pointeur pour recueillir l'adresse du pointeur vers la nouvelle zone memoire que realloc renvoie ET pour celle que tu lui indiques : myString=(char *)realloc(myString, strlen(myString) + 1 + strlen(tampon) + 1);
Si l'allocation réussi l'ancien pointeur n'est plus utilisable, il faut employer une variable temporaire

Code :
  1. char * nouveau;
  2. nouveau = (char *)realloc(myString, strlen(myString) + 1 + strlen(tampon) + 1);
  3. if( nouveau != NULL )
  4.    myString = nouveau;
  5. else
  6.    fprintf(stderr, "DTC\n" );


Reply

Marsh Posté le 07-11-2004 à 22:31:37    

Salut manatane, merci de ta réponse. J'avais trouvé une exemple un peu différent qui réutilisait le mêmepointeur et ca marchait.  
 
Enfin, j'ai fait la modif que tu m'as expliqué, mais j'ai toujours une erreur de segmentation au moment du realloc :/

Reply

Marsh Posté le 07-11-2004 à 22:32:06    

L'erreur est à la ligne myString = "Bonjour"; myString pointe vers une zone mémoire qui n'a pas été allouée dynamiquement et donc realloc ne peut pas y accéder, il renvoie NULL.
 
Il faudrait faire : strcpy (myString, "Bonjour" );

Reply

Marsh Posté le 07-11-2004 à 22:34:18    

merci blurk, ca marche :)
 
Merci à vous 2 :)

Reply

Marsh Posté le 07-11-2004 à 23:25:55    

ou alors tu te fais plaisir et tu t'aide avec un truc genre glib

Reply

Marsh Posté le 07-11-2004 à 23:34:09    

yep Taz, j'avais vu que tu en parlais dans un topic du même genre que celui-ci (j'ai gardé le lien sous le coude). Si pour la suite de mon projet c trop galère je testerai ca :)
 
Merci :)


Message édité par Jerome le 07-11-2004 à 23:34:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed