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

MFC Discussion :

Copier un Cstring dans un char* est ce possible?


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut Copier un Cstring dans un char* est ce possible?
    Voila j'ai une variable de type Cstring que je souhaiterai copier dans un char *, est ce possible?

    Sinon quel moyen ais je pour contourner ce probleme?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    J'ai pas trop compris comment cela fonctionner
    Voila mon bout de programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CString strOpenCap;
    char **argv;
    j'aimerai mettre strOpenCap dans *argv.

    Il faut que j'utilise strtol?

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2006
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    argv ... comme les paramètres de ta fonction main ? Pourquoi voudrais-tu mettre quelque chose dedans ?

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    En fait, tu dois allouer un espace mémoire égal à la longueur de la chaîne +1, puis tu appelles la méthode qui permet de retourner un const char* et tu fais un strncpy.

    Mais pourquoi dois-tu faire cela ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    en fait j'ai une fonction qui me permet d'ouvrir un fichier; qui a en parametre argv, qui est le chemin pour acceder au fichier.

    La je ss en train de réaliser une IHM. J'ai créer un Browser qui me renvoi dans un Cstring le chemin du repertoire ou mon fichier se trouve.

    Et je souhaite donc avant d'appeller ma fonction placer

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    oups...

    Et je souhaite donc avant d'appeller ma fonction placer la variable Cstring dans mon *argv.

    Je vais essayer ce que vous m'avez dit.
    J'ai touvé un truc dans MSDN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     // Convert to a char*
        const size_t newsize = 100;
        char nstring[newsize];
        strcpy_s(nstring, orig);
        strcat_s(nstring, " (char *)");
        cout << nstring << endl;
    Par contre je sais pas pourkoi, qd j essai de l'appliquer il me dit que ne sont pas défini.

    J'ai pourtant bien inclus le string.h.

    Je vais chercher encore

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 51
    Points
    51
    Par défaut
    http://www.developpez.net/forums/sho...d.php?t=146227

    regarde mon dernier post
    suis passé directement d'un Cstring à un a char * en une ligne

    ++

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    si argv est le pointeur des arguments d'un programme ,c'est une trés mauvaise idée de vouloir ecrire dedans....
    c'est une zone allouée en memoire quid de sa taille initiale ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    En fait je ss en train de passer un programme en C en une IHM en C++.
    J'utilise les MFC.

    Déja en C j'avais mon main qui démarer comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(int argc, char **argv)
    {....
    capt_off(argc,argv);
    ...
    }
    Dans mon IHM MFC j'aimerai appellé mes fonctions depuis un bouton OK que j'ai créer.

    Ais-je le droit de faire ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void CSnifferDlg::OnOK(int argc, char **argv) 
    {

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    voir ce post de la faq:
    http://c.developpez.com/faq/vc/?page...GetCommandLine
    dans le prog MFC tu auras la ligne de commande ...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Je ne comprends pas tres bien la Faq.

    Dois-je rajouter beaucoup de chose?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Pourquoi ceci ne fonctionne pas:

    dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual void OnOK(int argc, char **argv);
    dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void CSnifferDlg::OnOK(int argc, char **argv)
    Cela compile sans erreur mais plante lors de l'appui sur le bouton OK

    alors que ceci fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual void OnRangeUpdateRadio(UINT nID);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void CSnifferDlg::OnRangeUpdateRadio(UINT nID)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Pour cloturer (pour ma part) cette discussion

    la conversion Cstring-> char* j'ai suivi les conseils d'isidore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CString strOpenCap; 
    char *adresse=(char*)LPCTSTR(strOpenCap);

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Merci A Tous

  16. #16
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    faire tomber le cast est dangereux !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *adresse=(char*)LPCTSTR(strOpenCap);
    ce type de code est a proscrire.
    si l'objet CString renvoie un pointeur constant ce n'est pas pour rien .

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 51
    Points
    51
    Par défaut
    honnetement , je capte que dalle à vos truc.
    et la faq est vraiment pas compréhensible pour un débutant, pour moi c plus un pense bete pour les pro, parce qu'il manque des explication détaillées ligne par lignes

    si l'objet CString renvoie un pointeur constant ce n'est pas pour rien .
    ->je savais meme pas que que cstring renvoyait un pointeur, et je sais meme pas c quoi un LPCTSTR chais pas quoi, j'ai trouvé une ligne de code sur le net, ça a marché c tt ce qui compte lolzz

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est LPCTSTR qui renvoie un pointeur, c'est une fonction qui prend un CString et qui renvoie un pointeur vers un const char*. LA FAQ, c'est spur que c'est bien, mais la doc, c'est toujours plus exhaustif.

  19. #19
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu voulais bien sur dire que LPCTSTR est un type qui, là, sert à caster la surcharge const char* du CString

  20. #20
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est vrai que j'ai pas vérifié...
    Apparemment, ça a l'air d'être une macro de conversion vers un const char*, mais j'ai du mal à trouver sa définition...
    D'ailleurs, il ne faudrait pas utiliser (char*), mais plutôt un static_cast ou qqch du genre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Copier un BYTE* dans un CHAR*
    Par niglo dans le forum C
    Réponses: 5
    Dernier message: 21/07/2011, 15h36
  2. Ajouter un JComponent dans un JPanel est ce possible?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 23/04/2007, 21h02
  3. recevoir des donnees php dans un swf est ce possible ?
    Par carmen256 dans le forum Flash
    Réponses: 2
    Dernier message: 09/02/2007, 14h57
  4. [C# 2.0]Une Image dans un toolTip ? Est ce possible
    Par vinsou___ dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/06/2006, 00h28
  5. [VB5]Sélectionner du texte dans un label, est-ce possible?
    Par Silivrion dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 14/04/2006, 00h19

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