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

Visual C++ Discussion :

conversion string to char* et erreur ATL CString


Sujet :

Visual C++

  1. #1
    Membre confirm�
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Par d�faut conversion string to char* et erreur ATL CString
    Bonjour,

    J'ai un bout de code que je ne comprend pas trop
    car je dois convertir un string en char* et j'ai le message d'erreur suivant pourtant j'inclu bien mes header :


    #include<string>
    using std::string



    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    CString m_strvariable;
    char* charstr;
     
    charstr=m_strvariable.c_str();   // erreur
    J'ai l'erreur C2039 'c_str' : n'est pas membre de ATL::CStringT<Base Type,StringTraits>

    Donc apparement j'utilise du Win32. Par contre ATL et MFC c'est bien identique? Dois-je utiliser un autre header? ou bien simplement convertir mon CString en std::string?

    Autrement je peux convertir CString mais en const Char* uniquement avec ce code

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     
    charstr= (LPCTSTR) m_strvariable;

    Merci

  2. #2
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Pour du pur Win32 tu as la classe string et non CString

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    string m_strvariable;     // pas de CString ici
    char* charstr;
     
    charstr=m_strvariable.c_str();  // à vérifier je crois que string::c_str() retourne un const char*
    Pour de l'ATL ou MFC tu as la classe CString

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    CString str = "ma chaîne";
    LPSTR szBuffer = str.GetBuffer();
    // j'utilise mon szBuffer...
    str.ReleaseBuffer(); // je n'oublie pas
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    CString str = "ma chaîne";
    LPSTR szBuffer = (LPSTR)(LPCSTR) str;  // tu as aussi ce choix
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    CString str = ma chaîne;
    LPSTR szBuffer = str.GetString();  // tu as encore aussi ce choix

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ton premier code ne devrait pas compiler, c_str() retourne un pointeur const.
    Il n'existe aucun moyen d'obtenir un pointeur non-const sur les caract�res d'une std::string (except� un const_cast, bien s�r).
    Ton 3e code est un hack et pire, il fait �a avec les op�rateurs de cast C au lieu du const_cast.
    Ton 4e code ne compilera pas, le pointeur retourn� par GetString() est const �galement.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    D�conseill�, c'est un hack:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    string m_strvariable;
    char* charstr;
     
    //C'est un hack.
    charstr = const_cast< char * >(m_strvariable.c_str());
    Ce code-ci est OK :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    CStringA str = "ma chaîne";
    LPSTR szBuffer = str.GetBuffer();
    // j'utilise mon szBuffer...
    str.ReleaseBuffer(); // je n'oublie pas
    C'est un hack:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    CStringA str = "ma chaîne";
    LPCSTR sczStr = str;
    LPSTR szBuffer = const_cast< LPSTR >(sczStr);
    C'est encore un hack:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    CStringA str = ma chaîne;
    LPSTR szBuffer = const_cast< LPSTR >(str.GetString());
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirm�
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Par d�faut
    Re,

    Desole pour ce retard, merci bcp, j'ai utilise la methode GetBuffer() et releaseBuffer() pour liberer mon CString.

    Comment est-ce que ce code peut etre un hack ?

    code: charstr = const_cast< char * >(m_strvariable.c_str());


    Merci

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tr�s simple, il n�cessite un const_cast.
    Nul n'est suppos� avoir un acc�s en �criture au buffer interne d'une std::string.
    Tout acc�s en �criture vers ce buffer est donc un hack.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [D�butant] Conversion string vers char
    Par sachaaaz dans le forum C#
    R�ponses: 6
    Dernier message: 12/03/2012, 11h42
  2. conversion string en char *
    Par nana38000 dans le forum D�buter
    R�ponses: 7
    Dernier message: 02/04/2010, 14h49
  3. Conversion string to char *
    Par uriotcea dans le forum D�buter
    R�ponses: 2
    Dernier message: 22/12/2009, 12h51
  4. conversion String to char*
    Par warning dans le forum C++Builder
    R�ponses: 5
    Dernier message: 07/12/2007, 11h29
  5. Conversion String vers char
    Par benwit dans le forum Langage
    R�ponses: 27
    Dernier message: 30/03/2007, 14h01

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