concatener des "phrases" dans un char* - C - Programmation
Marsh Posté le 13-11-2005 à 11:15:31
strcpy/sprintf/strcat j'vois rien d'autre.
Apres a toi de bien gerer le char* de destination.
Marsh Posté le 13-11-2005 à 12:42:39
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"
Marsh Posté le 13-11-2005 à 17:11:20
Et attention au dépassement de capacité. C'est chiant le C pour ça.
Marsh Posté le 13-11-2005 à 20:34:12
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.
Marsh Posté le 13-11-2005 à 10:46:46
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+