Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
971 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°892787
Jerome
Posté le 07-11-2004 à 22:00:33  profilanswer
 

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 :)

mood
Publicité
Posté le 07-11-2004 à 22:00:33  profilanswer
 

n°892810
manatane
En vous remerciant, bonsoir
Posté le 07-11-2004 à 22:23:18  profilanswer
 

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


n°892819
Jerome
Posté le 07-11-2004 à 22:31:37  profilanswer
 

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 :/

n°892820
blurk
Posté le 07-11-2004 à 22:32:06  profilanswer
 

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

n°892823
Jerome
Posté le 07-11-2004 à 22:34:18  profilanswer
 

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

n°892862
Taz
bisounours-codeur
Posté le 07-11-2004 à 23:25:55  profilanswer
 

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

n°892866
Jerome
Posté le 07-11-2004 à 23:34:09  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
Conversion char en int, float et doubleConversion String en Pchar
[C++] Conversion char * vers wchar_t *[C] Probleme de conversion char -> int
Delphi : transtypage Interger -> Char : ??Initialisation d'un char*, malloc ou pas ?
[PHP/MySQL] utiliser 2 fois de suite le meme resultat MySQL ?Comment convertir Widestring en string
[VBA] String trop longAlimentation Variable() as string
Plus de sujets relatifs à : Concaténer un char à la suite d'une string


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR