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

wxWidgets Discussion :

Conversion wxString vers char* bizarre.


Sujet :

wxWidgets

  1. #1
    Membre régulier Avatar de bustaja
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 112
    Points
    112
    Par défaut Conversion wxString vers char* bizarre.
    Bonjour,

    je développe une appli qui utilise wxWidget et OpenCV. J'ai fait quelques classes mais je suis bloqué sur un problème étrange...

    En effet, j'ai besoin de convertir un wxString (récupéré par une instance de wxFileDialog) vers un char* (le nom d'un fichier, utilisé dans une classe utilisant openCV...).

    Mon problème est le suivant : mon char* ne contient que la premier lettre du wxString...

    J'dois être aveugle, j'sens que la faute est toute conne mais j'vois pas bien quoi...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    wxFileDialog fdlg(this,_T("Choisissez un fichier"));
    wxString fichier;
     
    // si annulation
    if(fdlg.ShowModal()==wxID_CANCEL)
    {
        return;
    }
    else
    {
      // Sinon charge le fichier
      fichier = fdlg.GetFilename();
     
      char* nomtr =(char*) fichier.c_str();
     
      string fichierSignet = "fichier.txt";
     
      // Creation du fichier ou écrasement
      ofstream fichier(fichierSignet.c_str(), ios::trunc);
     
      /* --- Cas d'erreur d'ouverture du fichier --- */
      if ( !fichier )
      {
      cerr << "Erreur de creation du fichier" << endl;
      }
     
      fichier << nomtr << endl;
      fichier.close();
    Et le fichier texte ne contient que la première lettre du Filename... :/

    A noter que si j'fais un char[] ça marche pas... et que si j'met des string partout, ça foire beaucoup d'autres lignes de mon programme... gniii les chaînes de caractères et leurs conversions...

    Merci de votre aide J'ai déjà eu assez de mal à trouver comment convertir un wxString vers un char*, alors je sèche...


  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Bizarre, essaie de remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char* nomtr =(char*) fichier.c_str();
    par celle là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char const* nomtr = fichier.c_str();
    Si cela ne compile pas, c'est que tu compile en Unicode, ce qui pourrai expliquer le comportement.

  3. #3
    Membre régulier Avatar de bustaja
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par Sylvain Togni
    Bizarre, essaie de remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char* nomtr =(char*) fichier.c_str();
    par celle là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char const* nomtr = fichier.c_str();
    Si cela ne compile pas, c'est que tu compile en Unicode, ce qui pourrai expliquer le comportement.
    En effet ça compile pas...

    J'ai déjà essayer de compiler en ANSI mais ça me fait un tas d'erreur que je ne connais pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    In file included from C:/Dev-Cpp/include/wx-2.6/wx/memory.h:20,
                     from C:/Dev-Cpp/include/wx-2.6/wx/object.h:25,
                     from C:/Dev-Cpp/include/wx-2.6/wx/wx.h:16,
                     from base.cpp:3:
    C:/Dev-Cpp/include/wx-2.6/wx/string.h: In function `int Stricmp(const char*, const char*)':
    C:/Dev-Cpp/include/wx-2.6/wx/string.h:135: error: `strcasecmp' undeclared (first use this function)
     
    In file included from C:/Dev-Cpp/include/wx-2.6/wx/wx.h:18,
                     from base.cpp:3:
     
    C:/Dev-Cpp/include/wx-2.6/wx/list.h: In constructor `wxListKey::wxListKey(const wxChar*)':
    C:/Dev-Cpp/include/wx-2.6/wx/list.h:361: error: `_wcsdup' undeclared (first use this function)
    C:/Dev-Cpp/include/wx-2.6/wx/list.h: In constructor `wxListKey::wxListKey(const wxString&)':
    C:/Dev-Cpp/include/wx-2.6/wx/list.h:363: error: `_wcsdup' undeclared (first use this function)
     
    base.cpp:85:30: warning: multi-character character constant
    base.cpp: In member function `void MainFrame::OnCopie(wxCommandEvent&)':
    base.cpp:269: error: cannot convert `const wxChar*' to `const char*' in initialization
     
    base.cpp:292: error: invalid conversion from `const char*' to `char*'
    base.cpp:292: error:   initializing argument 1 of `int Tr_video::fen_original_wx(char*, int)'
     
    make.exe: *** [base.o] Error 1
     
    Exécution terminée
    :/ Il aime pas les lib wxWidgets où je ne sais pas trop...

    Enfin j'vais essayer de voir à résoudre ça... merci du tuyau.

  4. #4
    Membre actif Avatar de cfdev
    Homme Profil pro
    Passionné
    Inscrit en
    Octobre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Passionné

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Points : 210
    Points
    210
    Par défaut
    Lut,

    essaye ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* mon char*= (const char*)monWxString.mb_str(wxConvUTF8);
    ++

  5. #5
    Membre régulier Avatar de bustaja
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par virtuA
    Lut,

    essaye ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* mon char*= (const char*)monWxString.mb_str(wxConvUTF8);
    ++
    Merci c'est ce que j'essaie depuis tout à l'heure

  6. #6
    Membre régulier Avatar de bustaja
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par bustaja
    Merci c'est ce que j'essaie depuis tout à l'heure
    J'ai plus d'erreurs mais pas contre, j'ai toujours un problème : la variable nomtr ne reçoit toujours rien...

    Etrange... je continue à chercher

  7. #7
    Membre régulier Avatar de bustaja
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 112
    Points
    112
    Par défaut
    J'ai enfin quelques choses (en suivant ta méthode) mais ça me donne ça :

    Alors que le fichier se nomme drop_copie.avi...

    Il ne prend pas mon fichier drop.avi par contre...

    Trop trop bizarre ! :/

  8. #8
    Membre actif Avatar de cfdev
    Homme Profil pro
    Passionné
    Inscrit en
    Octobre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Passionné

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Points : 210
    Points
    210
    Par défaut
    Ouai bizzard

    peut etre en changeant le format de convertion (wxConvUTF8)...

    ++

  9. #9
    Membre régulier Avatar de bustaja
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 112
    Points
    112
    Par défaut
    Un pote a résoulu le problème.

    Ok c'est peu propre mais ça roule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        char *nomtr = new char[fichiernom.Length()];
     
        for(int i=0;i<fichiernom.Length();i++)
        {
        nomtr[i] = fichiernom.GetChar(i);
        }
        nomtr[fichiernom.Length()] = '\0';
    Merci

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    C'est surtout invalide, tu écris le dernier caractère en dehors de la zone allouée.
    plutôt faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string nomtr((char const*)fichiernom.mb_str(*wxConvCurrent));
    puis utiliser nomtr.c_str() si besoin d'un char const*.

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

Discussions similaires

  1. Conversion wchar_t * vers char *
    Par didierll dans le forum C++
    Réponses: 5
    Dernier message: 16/04/2007, 16h28
  2. Conversion String vers char
    Par benwit dans le forum Langage
    Réponses: 27
    Dernier message: 30/03/2007, 14h01
  3. Conversion wchar_t ** vers char**
    Par progfou dans le forum C++
    Réponses: 21
    Dernier message: 23/02/2007, 10h12
  4. conversion gchar vers char
    Par shito dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 16/01/2007, 20h09
  5. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42

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