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=E8re et
donc ca m'aurait arrang=E9 que toutes ces phrases l=E0 soient dans le
char*.
J'ai voulu au debut tester en mettant des sprintf au lieu des printf,
pour sauvegarder =E0 chaque fois les differents affichages dans le
char*, mais =E0 chaque sprintf, malheuresement, il ecrase ce qu'il y
avait avant et resultat, =E0 la fin on a juste dans le char*, la
derni=E8re 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=E8s faudra
quand m=EAme 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.
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.
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.
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
Oui c'est une possibilité mais avec strcat je pense que c'est plus simple.
"Pierre Maurette" a écrit dans le message de news:
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
Oui c'est une possibilité mais avec strcat je pense que c'est plus simple.
"Pierre Maurette" <maurettepierre@wanadoo.fr> a écrit dans le message de
news:mn.6aac7d5b847fe7fe.31483@laposte.net...
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.
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
"Pierre Maurette" a écrit dans le message de [...]
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:
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
"Pierre Maurette" <maurettepierre@wanadoo.fr> a écrit dans le message de
[...]
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:
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" a écrit dans le message de [...]
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:
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
Merci, Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais pas lol.
A+
Merci,
Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais
pas lol.
Puis y'a aussi strcpy, ou les tableaux à 2D. J'aime aussi bcps les pointeurs.
Tu en penses quoi ? </cit>
La réponse est simple: parce que s'il s'agissait de concaténer des chaînes constantes, sans nécessité de sprintf(), la question initiale n'existerait pas ! sprintf(dummy, "Pierre"); ne fait que simuler un sprintf() avec une vraie chaîne de format. Par exemple, pour reprendre partiellemnt le PO: sprintf(dummy, "%s %.3f ","valeur:",f);
Puis y'a aussi strcpy, ou les tableaux à 2D. J'aime aussi bcps les
pointeurs.
Tu en penses quoi ?
</cit>
La réponse est simple: parce que s'il s'agissait de concaténer des
chaînes constantes, sans nécessité de sprintf(), la question initiale
n'existerait pas !
sprintf(dummy, "Pierre");
ne fait que simuler un sprintf() avec une vraie chaîne de format. Par
exemple, pour reprendre partiellemnt le PO:
sprintf(dummy, "%s %.3f ","valeur:",f);
Puis y'a aussi strcpy, ou les tableaux à 2D. J'aime aussi bcps les pointeurs.
Tu en penses quoi ? </cit>
La réponse est simple: parce que s'il s'agissait de concaténer des chaînes constantes, sans nécessité de sprintf(), la question initiale n'existerait pas ! sprintf(dummy, "Pierre"); ne fait que simuler un sprintf() avec une vraie chaîne de format. Par exemple, pour reprendre partiellemnt le PO: sprintf(dummy, "%s %.3f ","valeur:",f);
Désolé, je pensais que c'était implicite.
-- Pierre Maurette
Pierre Maurette
Merci, Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais pas lol.
Il ne vous reste plus qu'à trouver l'endroit et la manière de déclarer le tableau ou d'allouer le pointeur ;-)
Je me permets d'insister (une dernière fois, promis). Mes remarques sont surtout vraies si vous avez des résultats de ?printf() à concaténer, mélangés ou non avec des chaînes constantes ou des variables chaînes.
Pensez qu'à chaque appel de strcat(), la chaîne cible va être parcourue depuis le début jusqu'à la découverte de ' ', c'est à dire de plus en plus loin. Et imaginez que vous utilisiez cette technique pour faire un log. Oui, je sais, si ma tante en avait, ce serait mon oncle, mais bon. Votre code va bien fonctionner au début, puis peu à peu se mettre à ramer (*). Je connais un gars (Pierre Maurette) qui a fait la même erreur il y a quelques jour en PHP en proposant ça, calamiteux: function IsNotUnique($cible, $array){ return in_array($cible, array_diff_assoc($array , array_unique($array))); }
Et même pour la simplicité. Ce bout de code est censé faire une concaténation élémentaire, avec également sortie écran de l'élément et sécurisation.
tempo = snprintf(tablo + i, TAILLE - i, "%s %.3f","valeur:",f); if(tempo < 0){/* erreur conversion, breaker */} else if(!(tempo < TAILLE - i)){/* tablo trop petit, breaker */} else { puts(tablo + i); i += tempo; }
Vous pouvez le placer dans une boucle, ou l'utiliser plusieurs fois. Pour plusieurs raisons, vous auriez intérêt à le conserver même pour de rares chaînes constantes.
Qu'est-ce que ça donne avec strcat() ?
(*) Il vaut mieux d'ailleurs pratiquement tout le temps un code qui semble un peu plus lent mais constant à un autre fortement dépendant de conditions externes.
-- Pierre Maurette
Merci,
Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais
pas lol.
Il ne vous reste plus qu'à trouver l'endroit et la manière de déclarer
le tableau ou d'allouer le pointeur ;-)
Je me permets d'insister (une dernière fois, promis). Mes remarques
sont surtout vraies si vous avez des résultats de ?printf() à
concaténer, mélangés ou non avec des chaînes constantes ou des
variables chaînes.
Pensez qu'à chaque appel de strcat(), la chaîne cible va être parcourue
depuis le début jusqu'à la découverte de ' ', c'est à dire de plus en
plus loin. Et imaginez que vous utilisiez cette technique pour faire un
log. Oui, je sais, si ma tante en avait, ce serait mon oncle, mais bon.
Votre code va bien fonctionner au début, puis peu à peu se mettre à
ramer (*).
Je connais un gars (Pierre Maurette) qui a fait la même erreur il y a
quelques jour en PHP en proposant ça, calamiteux:
function IsNotUnique($cible, $array){
return in_array($cible, array_diff_assoc($array ,
array_unique($array)));
}
Et même pour la simplicité. Ce bout de code est censé faire une
concaténation élémentaire, avec également sortie écran de l'élément et
sécurisation.
tempo = snprintf(tablo + i, TAILLE - i, "%s %.3f","valeur:",f);
if(tempo < 0){/* erreur conversion, breaker */}
else if(!(tempo < TAILLE - i)){/* tablo trop petit, breaker */}
else
{
puts(tablo + i);
i += tempo;
}
Vous pouvez le placer dans une boucle, ou l'utiliser plusieurs fois.
Pour plusieurs raisons, vous auriez intérêt à le conserver même pour de
rares chaînes constantes.
Qu'est-ce que ça donne avec strcat() ?
(*) Il vaut mieux d'ailleurs pratiquement tout le temps un code qui
semble un peu plus lent mais constant à un autre fortement dépendant de
conditions externes.
Merci, Finalement, j'ai trouvé comment faire avec strcat, car j'y arrivais pas lol.
Il ne vous reste plus qu'à trouver l'endroit et la manière de déclarer le tableau ou d'allouer le pointeur ;-)
Je me permets d'insister (une dernière fois, promis). Mes remarques sont surtout vraies si vous avez des résultats de ?printf() à concaténer, mélangés ou non avec des chaînes constantes ou des variables chaînes.
Pensez qu'à chaque appel de strcat(), la chaîne cible va être parcourue depuis le début jusqu'à la découverte de ' ', c'est à dire de plus en plus loin. Et imaginez que vous utilisiez cette technique pour faire un log. Oui, je sais, si ma tante en avait, ce serait mon oncle, mais bon. Votre code va bien fonctionner au début, puis peu à peu se mettre à ramer (*). Je connais un gars (Pierre Maurette) qui a fait la même erreur il y a quelques jour en PHP en proposant ça, calamiteux: function IsNotUnique($cible, $array){ return in_array($cible, array_diff_assoc($array , array_unique($array))); }
Et même pour la simplicité. Ce bout de code est censé faire une concaténation élémentaire, avec également sortie écran de l'élément et sécurisation.
tempo = snprintf(tablo + i, TAILLE - i, "%s %.3f","valeur:",f); if(tempo < 0){/* erreur conversion, breaker */} else if(!(tempo < TAILLE - i)){/* tablo trop petit, breaker */} else { puts(tablo + i); i += tempo; }
Vous pouvez le placer dans une boucle, ou l'utiliser plusieurs fois. Pour plusieurs raisons, vous auriez intérêt à le conserver même pour de rares chaînes constantes.
Qu'est-ce que ça donne avec strcat() ?
(*) Il vaut mieux d'ailleurs pratiquement tout le temps un code qui semble un peu plus lent mais constant à un autre fortement dépendant de conditions externes.
-- Pierre Maurette
halfwolf
Pierre Maurette wrote:
J'avoue ne pas comprendre pourquoi utiliser dummy en tampon ? La réponse est simple: parce que s'il s'agissait de concaténer des
chaînes constantes, sans nécessité de sprintf(), la question initia le n'existerait pas !
Ok, moi aussi je préfère l'arithmétique des pointeurs avec le sprintf.
HalfWolf
Pierre Maurette wrote:
J'avoue ne pas comprendre pourquoi utiliser dummy en tampon ?
La réponse est simple: parce que s'il s'agissait de concaténer des
chaînes constantes, sans nécessité de sprintf(), la question initia le
n'existerait pas !
Ok, moi aussi je préfère l'arithmétique des pointeurs avec le
sprintf.