IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Convertir un double ou float en *char


Sujet :

Langage C++

  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Convertir un double ou float en *char
    cheres amies, amis du forum

    je souhaite convertir une variable par exemple temp, que j'aurais declarer en double ou float, en *char.

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Avec un ostringstream ?
    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();
    Maisz en c++, il généralement conseillé d'utilisé des std::string plutot que des chaine de style C(cf FAQ)

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    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 ?

  4. #4
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    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;

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 548
    Par défaut
    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

  6. #6
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    c'est un test pour voir si sa marche

  7. #7
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 548
    Par défaut
    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 :
    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();
    }
    A noter que toute réécriture dans le stream invalide aussi le buffer interne.
    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

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    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
    • à 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é
    • ...
    Toute cette gestion est amplement simplifée avec std::string:
    • 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

Discussions similaires

  1. Réponses: 35
    Dernier message: 31/08/2008, 14h46
  2. Réponses: 27
    Dernier message: 13/01/2006, 23h46
  3. Réponses: 6
    Dernier message: 28/10/2005, 12h11
  4. convertir un Double en integer
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/08/2005, 09h08
  5. Convertir un varchar en float
    Par Tapioca dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 26/07/2004, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo