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

C++ Discussion :

Conversion String en Const char* avec .c_str() ou .data()


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 56
    Points
    56
    Par défaut Conversion String en Const char* avec .c_str() ou .data()
    Bonjour,

    J'ai un problème de conversion de String en Const char* et je ne trouve pas la solution.

    Donc dans une fonction, j'ai un String nommé originalName, je voudrais le convertir en const char* pour le transmettre à une fonction setName. Je fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char* name = originalName.c_str();
    object.body->getNxActor()->setName( name );
    J'ai tester aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char* name = originalName.data();
    object.body->getNxActor()->setName( name );
    Si juste après le setName, je fais un getName pour l'afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << object.body->getNxActor()->getName() << std::endl;
    il m'affiche correctement le nom de l'objet.
    Par contre si je sort de ma fonction et que je l'appel par un autre moyen,
    il m'affiche des sigles bizarres.

    Le problème, c'est que si je mets en dur le nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object.body->getNxActor()->setName( "test" );
    ca marche impeccable. Donc j'imagine que je construit pas correctement mon const char* ? Ou que j'ai un problème de pointeur ? Je sais pas trop.

    Je bloque si quelqu'un pouvait m'aiguiller s'il vous plait.
    Merci.

  2. #2
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    A quoi ressemble object.body->getNxActor()->setName ? J'ai l'impression qu'il stocke l'adresse qu'on lui donne en paramètre au lieu de copier le contenu. Peut-être faut-il créer une nouvelle chaîne const char* dédiée ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 56
    Points
    56
    Par défaut
    le prototype de setName est :
    virtual void setName(const char* name) = 0;

    Heu, je viens de constater ce commentaire qu'en penses-tu :

    This is for debugging and is not used by the SDK. The string is not copied by the SDK, only the pointer is stored.

    \param[in] name String to set the objects name to.

    C'est le SDK de Physx.

  4. #4
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Morrigan Voir le message
    The string is not copied by the SDK, only the pointer is stored.

    A la sortie de ta fonction, std::string est détruit et le pointeur qui va avec libéré. Donc tu ne peux pas faire comme ça. Cette fonction qui n'a visiblement qu'un but de debug devrait recevoir une chaîne soit en dur soit qui aie une durée de vie plus grande que l'objet qui va la stocker. Enfin, ça m'a l'air assez bancale comme fonction et comme conception.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 56
    Points
    56
    Par défaut
    Bon pas grave je me suis débrouillé autrement

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. conversion const std::string et const char * ?
    Par panthere noire dans le forum C++
    Réponses: 7
    Dernier message: 28/02/2011, 15h51
  2. Conversion String en hexa char special
    Par Jahz dans le forum Langage
    Réponses: 1
    Dernier message: 03/08/2007, 15h52
  3. Convertir String^ en const char*
    Par Sixdeux dans le forum C++/CLI
    Réponses: 3
    Dernier message: 22/05/2007, 09h58
  4. conversion AnsiString en const char*
    Par Mangacker dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/05/2007, 18h43
  5. Conversion CString en const char*
    Par LRobi dans le forum MFC
    Réponses: 8
    Dernier message: 19/07/2005, 12h12

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