cheres amies, amis du forum
je souhaite convertir une variable par exemple temp, que j'aurais declarer en double ou float, en *char.
Merci
Version imprimable
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:
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 ?
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:
1
2
3
4 std::ostringstream converter; converter << valeur; char const* maChaine = converter.str().c_str(); std::cout <<maChaine<< std::endl;
8O mais pourquoi passez vous par std::ostringstream avec récupération de la chaine pour finalement l'afficher ?
Code:std::cout <<valeur<< std::endl;
c'est un test pour voir si sa marche
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:
1
2
3
4
5
6
7
8 const char * str(double valeur) { std::ostringstream converter; converter << valeur; return converter.str().c_str(); }
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
- ...