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

  FORUM HardWare.fr
  Programmation
  C

  concatener des "phrases" dans un char*

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

concatener des "phrases" dans un char*

n°1244536
thierry_b
Posté le 13-11-2005 à 10:46:46  profilanswer
 

Bonjour,
 
J'aimerais vous poser une question.
 
Voici un bout de code
 
void single_converter(char* input_currency, double input_amount) {
int i;
double resultat;
char* output_currency = (char*) malloc(sizeof(char)*3);
 
printf("Conversion pour: %s %f.\n",input_currency,input_amount);
 
for (i=0; i<5; i++) {
output_currency = determine_currency(i);
resultat = convert(input_currency,output_currency, input_amount);
printf("%s %.3f\n",output_currency,resultat);
}
}
 
J'aimerais que les affichages des differents printf soient ecrits dans un char*.
 
C'est pour un tme d'info, en fait on doit utiliser les tubes, et faut qu'en fait, que le processus fils transmette les resultats au père et donc ca m'aurait arrangé que toutes ces phrases là soient dans le char*.
 
J'ai voulu au debut tester en mettant des sprintf au lieu des printf, pour sauvegarder à chaque fois les differents affichages dans le char*, mais à chaque sprintf, malheuresement, il ecrase ce qu'il y avait avant et resultat, à la fin on a juste dans le char*, la dernière phrase...
 
J'ai aussi eu l'idee, d'ecrire de creer un char** temporaire, pour que chaque phrase soit ecrise dans une case du tableau, mais après faudra quand même concatener chaque case du char** avec le char*.
 
J'ai eu aussi l'idee d'utiliser strcat, mais le pb ,c'est qu'il faut absolument que le char* de destination soit vide, sinon ca marche pas Sad.
 
Quelqu'un a une idée simple et efficace lol?
 
Merci
A+

mood
Publicité
Posté le 13-11-2005 à 10:46:46  profilanswer
 

n°1244541
Joel F
Real men use unique_ptr
Posté le 13-11-2005 à 11:15:31  profilanswer
 

strcpy/sprintf/strcat j'vois rien d'autre.
Apres a toi de bien gerer le char* de destination.


Message édité par Joel F le 13-11-2005 à 11:16:18
n°1244565
Sve@r
Posté le 13-11-2005 à 12:42:39  profilanswer
 

thierry_b a écrit :

J'ai voulu au debut tester en mettant des sprintf au lieu des printf, pour sauvegarder à chaque fois les differents affichages dans le char*, mais à chaque sprintf, malheuresement, il ecrase ce qu'il y avait avant et resultat, à la fin on a juste dans le char*, la dernière phrase...


Normal si t'as mis à chaque fois la même destination !!!
sprintf(dest, "%s", "Hello " )
sprintf(dest + 6 "%s", "World" )
=> dest contiendra "Hello World"


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1244712
slash33
Posté le 13-11-2005 à 17:11:20  profilanswer
 

Et attention au dépassement de capacité. C'est chiant le C pour ça.

n°1244810
Trap D
Posté le 13-11-2005 à 20:34:12  profilanswer
 

Ton idée de mettre tes réponses dans un tableau était bonne :
 
char * single_converter(char* input_currency, double input_amount) {  
  int i;  
  double resultat;  
  char tmp[128]; // buffre d'écriture temporaire, j'ai pris 128 mais tu peux prendre plus
  char *tab[5]; // tableau de mémorisation des chaînes
  int len; // pour calculer la longueur de la chaîne finale
  char* output_currency;  // = (char*) malloc(sizeof(char)*3);  
  // à quoi sert ce malloc puisque tu détruis l'adresse juste après ??
 
  printf("Conversion pour: %s %f.\n",input_currency,input_amount);  
 
  for (i=len=0; i<5; i++) {  
     // destruction de l'adresse du output_currency
    output_currency = determine_currency(i);  
    resultat = convert(input_currency,output_currency, input_amount);  
    sprintf(tmp, "%s %.3f\n",output_currency,resultat);  
    tab[i++] = strdup(tmp);
     len += strlen(tmp) + 1; // pour les séparareurs éventuels à ajouter
  }  
  //  on alloue maintenant la longueur +1 pour l'espace final
  output_currency = malloc(len + 1);
  if (output_currency != NULL)
  {
     *output_currency = 0;
     for(i = 0; i < 5; i++)
       sprintf(output_currency + strlen(output_currency), "%s ", tab[i]);
  }
  // on désalloue tab[i];
  for(i = 0; i < 5; i++)
     free(tab[i]);
  return output_currency;
}  
 
Il ne faudra oublier de tester le retour de  retour de single_converter et de liberer par free le retour après utilisation.


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

  concatener des "phrases" dans un char*

 

Sujets relatifs
concatener du texte à un champ, avec un UPDATE ??[JavaScript] Concaténer des chaines pour faire un nom de var. [Résolu]
[Résolu] concatener+VBSCONCATENER UNE PHRASE PLUSIEURS FOIS SOUS DOS
Concatener un même mot[SQL]Concaténer 2 chaînes numériques avec espace reservé
concatener chaine + entier[Résolu ] - VBS - Comment concaténer
comment concaténer 2 entiersConcatener diff valeurs
Plus de sujets relatifs à : concatener des "phrases" dans un char*


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