cheres amies, amis du forum
je souhaite convertir une variable par exemple temp, que j'aurais declarer en double ou float, en *char.
Merci
cheres amies, amis du forum
je souhaite convertir une variable par exemple temp, que j'aurais declarer en double ou float, en *char.
Merci
Avec un ostringstream ?
Maisz en c++, il généralement conseillé d'utilisé des std::string plutot que des chaine de style C(cf FAQ)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 double temp; ostringstream converteur; converter << temp; char const* maChaine = converter.str().c_str();
Salut,
Comme dit précédemment, les stringstream permettent de faire des conversions entre les nombres et les chaines de caractères. Cf l'entrée de la F.A.Q : Comment convertir un nombre en une string ?
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Merci
mais l'explication de joe est plus clair par rapport à la FAQ.
j'ai modifié un peu code mais cela ne fonctionne pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 std::ostringstream converter; converter << valeur; char const* maChaine = converter.str().c_str(); std::cout <<maChaine<< std::endl;
mais pourquoi passez vous par std::ostringstream avec récupération de la chaine pour finalement l'afficher ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::cout <<valeur<< std::endl;
Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour)
N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML
Bonjour,
pourquoi dites vous que cela ne marche pas ?
au cas où : il est bien évident que la chaine de caractères converter.str() (et donc converter.str().c_str()) a une durée de vie limitée à celle de converter, le code suivant est donc invalide :
A noter que toute réécriture dans le stream invalide aussi le buffer interne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 const char * str(double valeur) { std::ostringstream converter; converter << valeur; return converter.str().c_str(); }
Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour)
N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML
Salut,
le char* renvoyé par c_str() a effectivement une durée de vie limitée à celle de la chaine au départ de laquelle la fonction a été appelé, c'est la raison pour laquelle il est fortement conseillé de travailler avec les std::string partout où c'est possible et de n'appeler c_str() que quand on n'a vraiment pas d'autre choix (par exemple, lorsqu'il s'agit d'appeler une fonction C prenant un char *)
De plus, la gestion et l'utilisation de la std::string sont beaucoup plus simple que la gestion d'un char* :
avec un char*, il faut penser
Toute cette gestion est amplement simplifée avec std::string:
- à garder un espace mémoire suffisant pour représenter tous les caractères (sans oublier le '\0' final)
- à utiliser strcmp pour comparer deux chaines de caractères
- a utiliser strcpy pour copier une chaine de caractères
- à utiliser strcat pour concaténer deux chaines
- à libérer la mémoire allouée avant de perdre toute référence au tableau de caractères utilisé
- ...
- la mémoire est gérée en interne (allouée et libérée en temps opportun)
- l'opérateur == fonctionne parfaitement, y compris avec des chaines constantes magique ( str=="salut" fonctionne parfaitement)
- l'opérateur = assure la copie sans risque
- les opérateur + et += assurent la concaténation
- il existe une quantité faramineuse (certains diront même qu'il y en a trop) de fonction permettant la recherche et le parcours des différents caractères
- ...
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager