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 :

c_str() : quelle librairie la prend en charge?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par défaut c_str() : quelle librairie la prend en charge?
    Bonjour,

    je converti un CString en char*, et pr cela je fais un :
    strcpy(char*, CString.c_str());

    A la compilation ca m'affiche : error C2039: 'c_str' : is not a member of 'CString'

    quelle librairie/bibliotheque devrais-je inserer?
    Sinon, y'a-t-il une autre maniere de convertir le CString en char*?

    merci de votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    librairie <string> de la librairie standard C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <string>
    #include <iostream>
    int main() {
     
       std::string maChaineCPP = "Bonjour, ceci est une chaine.";
     
       std::cout << "affichage d'une string C++ :" << maChaineCPP << std::endl;
     
       std::cout << "affichage d'une string C : " << maChaineCPP.c_str() << std::endl;
     
    }
    EDIT : voir FAQ C++ ici qqpart ou http://www.cplusplus.com/reference/string/string/

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    .c_str() est une méthode des string standards (du namespace std), pas des CString d'MFC.

    Pour les CString il existe l'operator LPCTSTR qui peut convenir si tu ne doit pas modifier le char* obtenu. Comme c'est un opérateur, la convertion est implicite est ce code devrait compiler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void func( char const * )
    {
    }
     
    int main()
    {
      CString str( "Hello" );
      func( str );
    }

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par défaut merci
    je vous remercie de vos réponses, elles ont pu m'éclaircir mon pbm.
    maintenant, il est vrai que dans mon code je cherche à modifier la variable de type CString à chaque clic de souris.
    Au fait je m'explique, j'utilise le CString pour récupérer le nom de fichier à chaque clic sur un dossier ou fichier. Le nom de fichier, j'ai besoin de l'utiliser dans la classe CMonProjetDoc mais je dois le récupérer en char* .
    La ligne de code qui fait la conversion est celle ci:

    p->chemin_dist=(LPTSTR)(LPCTSTR)strItem;

    le p est un pointeur sur le doc.
    chemin_dist est un char* ( attribut public de CMonProjetDoc)

    ca m'affiche plus d'erreur mais ca plante à l'execution.

    Sachant qu'à chaque clic de souris, la variable strItem est modifiée.
    comment pourrai-je récupérer ma variable dans le CDoc en char*.???

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Beuaaark! Un const_cast caché!

    Si tu veux récupérer un TCHAR* non-constant, utilise la fonction membre GetBuffer(). Et n'oublie pas de faire un ReleaseBuffer() ensuite.

    PS: Aussi, si tu compiles en unicode, ça ne marchera pas, car en unicode, un TCHAR est un wchar_t et non un char. Là, tu as plusieurs solutions, par ordre décroissant de préférence:
    1. Travailler en TCHAR sur toute la ligne (pas toujours possible),
    2. Travailler en TCHAR mais utiliser une CStringA pour convertir en char et passer à la fonction (toujours possible)
    3. Ne pas compiler en unicode et remettre la conversion en TCHAR à plus tard,
    4. Ou utiliser une CStringA sur toute la ligne.
    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.

  6. #6
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut Melange de deux choses
    Salut,

    que-ce que tu fais ?! Aujourd'hui on est Noel chez nous ... et en France ?!
    Il faut manger, boir, feter ... pas programmer :-))


    Bonne. A mon avis tu melanges deux choses. CString de MFC et string de STL.

    Pour CString tu puex faire :

    CString str = "salut";
    char text[10];

    strcpy ( text, str );
    ou
    strcpy ( text, (LPCSTR)str );
    Les deux marchent compile avec mon MS VC 6.0 tres bien.


    Pour string de STL tu peux faire :

    string str = "salut";
    char text[10];

    strcpy ( text, str.c_str() );

    C'est tout. Salut et joyeux Noël. Fredy

    (et moi, je vais monger, boir, feter, ... )

Discussions similaires

  1. [Prog graphique] Quelle librairie utiliser?
    Par vinzzzz dans le forum C
    Réponses: 11
    Dernier message: 23/01/2006, 18h57
  2. [SNMP] Sur quelle librairies se baser pour du snmp ?
    Par wulfy dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/01/2006, 10h43
  3. Quelle librairie (portable) utiliser pour le son ?
    Par Nico*3-3 dans le forum Bibliothèques
    Réponses: 20
    Dernier message: 19/03/2005, 00h01
  4. [Acquisition Video]Quelle Librairie ??
    Par Belzano dans le forum Choisir un environnement de développement
    Réponses: 3
    Dernier message: 10/08/2004, 17h27

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