conversion double -> const char*

conversion double -> const char* - C++ - Programmation

Marsh Posté le 13-01-2008 à 02:41:09    

Bonjour ! :hello:
 
 
J'ai besoin dans un programme de convertir un nombre que j'ai en "double" en un "const char*" car il faut que je concatène plusieurs double.
J'essaie donc de faire une boucle qui avant chaque concaténation va transformer le double en un const char* mais je n'y arrive pas.
 
J'ai essayé avec  "sprintf(pulstemp2, "%f", pulstemp);" mais apparemment ça ne convertit qu'en char et le compilateur me donne l'erreur suivante : invalid conversion from ‘char’ to ‘char*’
 
 
Y'aurait-il une bonne âme qui pourrait m'offrir un petit coup de pouce ?
 
Merci beaucoup par avance :)

Reply

Marsh Posté le 13-01-2008 à 02:41:09   

Reply

Marsh Posté le 13-01-2008 à 02:56:43    

Zieute du côté de ostringstream : http://cplusplus.com/reference/iostream/ostringstream/
 
Il te suffit de définir un ostringstream et d'utiliser l'opérateur <<.
La propriété str te permet d'obtenir le const char* que tu veux.
 
Essaie de raisonner d'abord en C++ plutôt qu'en C : sprintf() c'est effectivement irremplaçable dans certains cas particuliers, mais dans la majorité des cas, le C++ fournit des classes bien plus pratiques et moins embêtantes à utiliser (je pense surtout à la gestion mémoire).

Reply

Marsh Posté le 13-01-2008 à 04:00:06    

Elmoricq a écrit :

Zieute du côté de ostringstream : http://cplusplus.com/reference/iostream/ostringstream/
 
Il te suffit de définir un ostringstream et d'utiliser l'opérateur <<.
La propriété str te permet d'obtenir le const char* que tu veux.
 
Essaie de raisonner d'abord en C++ plutôt qu'en C : sprintf() c'est effectivement irremplaçable dans certains cas particuliers, mais dans la majorité des cas, le C++ fournit des classes bien plus pratiques et moins embêtantes à utiliser (je pense surtout à la gestion mémoire).


 
 
Merci, je vais regarder ça :)

Reply

Marsh Posté le 13-01-2008 à 04:37:41    

Salut,
 
Tu peux aussi jeter un oeil du côté de boost::lexical_cast (le 2nd exemple correspondant à ce que tu cherches).

Reply

Marsh Posté le 13-01-2008 à 07:52:08    

Je dois être bête, mais je ne comprends pas le fonctionnement de ces exemples.
______________________________________________
void log_message(const std::string & );
 
void log_errno(int yoko)
{
    log_message("Error " + boost::lexical_cast<std::string>(yoko) + ": " + strerror(yoko));
}
______________________________________________
 
Je suis incapable de faire le lien entre l'entrée (le int yoko on dorait ?) et la sortie (???)
 

Reply

Marsh Posté le 13-01-2008 à 13:01:10    

Le type de la sortie est l'argument du template. L'entrée est en effet int yoko. Le résultat de l'expression

Code :
  1. boost::lexical_cast<std::string>(yoko)


est donc une string contenant yoko en littéral. Tu n'as qu'à remplacer 'yoko' par ton double, et c'est bon. Si l'utilisation d'un char* est vraiment indispensable, tu n'as plus qu'à appeller std::string::c_str() sur l'objet résultant.


Message édité par IrmatDen le 13-01-2008 à 18:52:11
Reply

Marsh Posté le 13-01-2008 à 17:37:50    

Je vais essayer ça quand j'aurai mon programme sous la main :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed