concatener des "phrases" dans un char*
Le
Thierry B
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.",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",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+
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.",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",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+

Poser une question


char tablo[256];
int i = 0;
i += sprintf(tablo + i, "Pierre");
i += sprintf(tablo + i, " ");
i += sprintf(tablo + i, "Maurette");
puts(tablo);
Vous devrez choisir entre sprintf() et snprintf(), vous protéger du
dépassement, tester le retour, etc.
Vous pouvez ajouter un séparateur.
--
Pierre Maurette
"Pierre Maurette" news:
Personnellement, les pointeurs et leur arithmétique me parlent bien, et
les fonctions genre strcat() m'enduisent facilement d'erreur.
Avec strcat(), le même code serait celui-ci:
char tablo[256];
char dummy[32];
tablo[0] = ' ';
sprintf(dummy, "Pierre");
strcat(tablo, dummy);
sprintf(dummy, " ");
strcat(tablo, dummy);
sprintf(dummy, "Maurette");
strcat(tablo, dummy);
puts(tablo);
ou éventuellement (mais on "complique", surtout si on est dans une
boucle):
char tablo[256];
char dummy[32];
sprintf(tablo, "Pierre");
sprintf(dummy, " ");
strcat(tablo, dummy);
sprintf(dummy, "Maurette");
strcat(tablo, dummy);
puts(tablo);
Voilà pour la simplicité ressentie. Mais ici, il y a en plus une
différence objective entre les deux codes. Je sais bien que la
performance n'est pas le critère premier en général, mais là c'est
Waterloo, sans que le compilateur ne puisse optimiser. Je vous laisse
analyser, mais voyez simplement que chaque strcat(), outre un appel de
fonction, ajoute un scan à la recherche de ' ' et une copie de chaîne.
Le fait d'envoyer à l'écran le résultat du sprintf() ne changera pas
significativement (je n'écris pas "pas du tout") la comparaison entre
les deux solutions, puisqu'on va envoyer un pointeur à puts(). On peut
gagner un peu si on accepte 'n' comme séparateur.
Je ne vois pas *en C standard* de possibilité simple de cumuler la
fabrication d'un chaîne et la sortie stdout. Mais peut-être qu'un truc
évident m'échappe ...
--
Pierre Maurette
Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais
pas lol.
A+
J'avoue ne pas comprendre pourquoi utiliser dummy en tampon ? Pourquoi
pas juste :
char tablo[256];
tablo[0] = ' ';
strcat(tablo, "Pierre");
strcat(tablo, " ");
strcat(tablo, "Maurette");
puts(tablo);
HalfWolf