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 :

chaînes de caractères : problème selon l'OS


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut chaînes de caractères : problème selon l'OS
    Bonjour, j'utilise dev-c++ et je travaille sur un programme. Ce programme fonctionne correctement, hors je l'ai fait testé sous linux et là par contre il buggue à un certain niveau du programme.

    Après moultes tests, il s'est avéré que le programme a du mal avec les chaînes de caractères sous linux. Voici le bout de code qui foire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool WP_ModelObj::validateFile(const string line)
    {
       fstream fichierDebug;
       fichierDebug.open ("debug.txt",ios::out|ios::app); 
       fichierDebug << "3DG1 == " << line << " : " << (line == "3DG1") << endl;
       fichierDebug.close();
       if (line == "3DG1")
       {
          return true;
       }
     
       return false;
    }
    L'écriture dans le fichier sous windows renvoit :

    3DG1 == 3DG1 : 1
    C'est évidement ce qui est attendu. Sous linux voici ce qui s'affiche :

    : 0 == 3DG1
    La variable line à pour valeur "3DG1" avant l'appel de fonction quelquesoit l'OS. Je me demande donc si le problème ne vient pas du type du paramètre en entrée.

    Je vous remercie pour l'aide que vous m'apporterais.

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Eassaye quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... << ios::fout.flush() << ...
    entre chaque "<<" de ta ligne posant pb.

  3. #3
    Membre émérite

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Non, le problème est en amont, sous linux la variable line est vide.

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par Sylvain Togni
    Non, le problème est en amont, sous linux la variable line est vide.
    Et l'inversion du résultat affiché ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut
    Je me demandais si il ne suffirait pas que j'utilise des tableaux de char plutot que des string.

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Ce n'est pas ici qu'il faut que tu regardes, mais dans les focntions appellantes.
    Elle vient d'où ta chaine ?

    (passer aux char* ne chagera rien du tout)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Regarde l'implémentation de ton constructeur de recopie (s'il est défini) de ta classe string. Le prototype de ta méthode est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool WP_ModelObj::validateFile(const string line)
    Donc à chaque appel à cette méthode, une nouvelle instance de string sera créée grâce à ton constructeur de recopie.
    Essaie de déclarer ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool WP_ModelObj::validateFile(const string& line)
    pour être sûr d'avoir une référence sur ton string et non une copie hasardeuse de ce dernier.

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Vu que son fstream n'est pas préfixé non plus, je soupçonne que sa string soit en fait une std::string. Il n'aura rien à regarder de ce côté là.

    En revanche, je verrai bien une lecture incorrecte d'un truc qui est envoyé à la fonction.

    EDIT: Un problème d'encoding ? Tu es en UTF sur ton linux?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Et quid des retours à la lignes sur fichiers textes qui différents entre UNIX et Windows ? ...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut
    EDIT: Un problème d'encoding ? Tu es en UTF sur ton linux?
    Ben justement ce n'est pas mon linux. Je suis uniquement sous windows et je fais tester par un tiers. Autrement dit ça fait une semaine que je cherche en vain.

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Que cela soit ton linux ou un autre, cela ne change rien.

    Questions:
    - est-ce qu'un simple ``std::cout << "toto";'' marche bien ?
    - que vaut ta chaîne avant appel à la fonction ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. char et chaîne de caractères : problème d'espaces
    Par recherche888 dans le forum MATLAB
    Réponses: 17
    Dernier message: 03/02/2012, 09h23
  2. [Configuration] problème de taille de chaînes de caractères
    Par Wormus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 21/10/2005, 14h55
  3. Problème sur des chaînes de caractères
    Par Anonymous dans le forum Access
    Réponses: 9
    Dernier message: 16/09/2005, 08h21
  4. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34
  5. Problème de chaîne de caractères (BSTR)
    Par patvdb dans le forum MFC
    Réponses: 2
    Dernier message: 26/02/2004, 15h44

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