GNT sans publicité, site mobile, fonctionnalitées exclusives...

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+
Lire les 8 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #906667
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 %.3fn",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...
Je n'ai pas compris la suite. Ext-ce que ça vous aide:


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.


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+



--
Pierre Maurette

Sylvain/11XX
Le #916355
Oui c'est une possibilité mais avec strcat je pense que c'est plus simple.


"Pierre Maurette" news:
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 %.3fn",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...
Je n'ai pas compris la suite. Ext-ce que ça vous aide:


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.


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+



--
Pierre Maurette





Pierre Maurette
Le #916354
"Pierre Maurette" [...]

Je n'ai pas compris la suite. Ext-ce que ça vous aide:

char tablo[256];
int i = 0;
i += sprintf(tablo + i, "Pierre");
i += sprintf(tablo + i, " ");
i += sprintf(tablo + i, "Maurette");
puts(tablo);


Oui c'est une possibilité mais avec strcat je pense que c'est plus simple.
"Plus simple", c'est beaucoup une question de personne.

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


Thierry B
Le #916353
Merci,
Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais
pas lol.

A+
halfwolf
Le #916352
Bonjour,

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


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

Publicité
Suivre les réponses
Poster une réponse
Anonyme