Retourner aux forums || Retourner au forum Programmation.c++
existe-t-il un equivalent à sprintf pour le C++ par exemple quelque chose comme
ofstream f;
...
f.formatedString(format, arguments);
et qui formatterait la chaîne de caractère.
J'ai cherché sur google mais je n'ai pas trouvé mon bonheur.
merci
> Lire le message (5 commentaires, moyenne: 1,4).
std::stringstream
sprintf() est bien sur utilisable en C++, mais les streams de la STL le remplace avantageusement.
au passage, sprintf() ne devrait jamais etre utilise car on ne peut pratiquement jamais predire la taille de la chaine resultante. snprintf() le garantit mais le resultat risque d'etre tronque.
je ne suis pas sur de comprendre ce que tu veux d'apres ton exemple, mais comme sprintf() sert a formatter une chaine en memoire plutot que vers un fichier, je suppose qu'il te faut utiliser la classe stringstream de la STL. elle possede entre autres la propriete d'un ostream et genere la chaine formatee dans un string sous-jacent auquel on accede par la methode str(). l'utilisation classique est :
#include <sstream>
...
std::stringstream s;
s << "message bidon : le vecteur possede " << v.size() << " elements\n";
string msg = s.str();
tous les types T auxquels correspond un operateur "std::ostream & operator << (std::ostream &, const T &)" (ce qui est le cas des types primitifs bool, int, const char *, etc.) peuvent ensuite etre utilises de la sorte. c'est en general une bonne alternative a une methode toString() qui alourdi le code inutilement.
par exemple,
class host {
...
public :
const string &name() const;
bool state() const;
};
std::ostream & operator << (std::ostream &o, const host &h)
{
return o << "host " << h.name() << " (" << (h.state() ? "up" : "down") << ")";
}
void timeout(const host &h)
{
std::stringstream s;
s << h << " is not responding\n" "abort ?";
popup(s.str());
}
a noter que la classe ostrstream est obsolete.
-
[^]Re: std::stringstream
Posté par neil () le 05/06/2005 à 14:32. (lien). Évalué à 1.au passage, sprintf() ne devrait jamais etre utilise car on ne peut pratiquement jamais predire la taille de la chaine resultante. snprintf() le garantit mais le resultat risque d'etre tronque.
Tant qu'il n'y a que des nombres et des caractères ça va, si on connait le nombre maximum de bits que peuvent prendre les nombres.
Perso je trouve que la STL elle pue :/ à la rigueur boost c'est un peu mieux...
-
[^]Re: std::stringstream
Posté par elloco (page perso, ) le 05/06/2005 à 14:43. (lien). Évalué à 2.ok, pour ça, ça va mais le problème est le suivant : je ne connais pas à l'avance le format de la chaîne de caractère.
Donc apparemment, je suis un peu obligé d'utiliser sprintf
boost
voir du coté de :
http://www.boost.org/libs/format/(...)
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c++



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.