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 :

[Debutant]Probleme avec getline()


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut [Debutant]Probleme avec getline()
    je cherche a découper une string selon un séparateur ',' mais la premiere valeur renvoyée par getline est abérente(elle renvoit des caracteres qui n'ont rien a voir) (toutes celles qui suivent sont correctes).
    j'ai aussi remarqué que si je fait un cout << ""; (ou un affichage quelconque avec cout) dans le main avant l'appel de la méthode, le probleme est résolu. J'aimerai comprendre en quoi cette instruction fixe le bug.

    voila le code de la méthode qui pose probleme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //il y a valeur incohérente stockée dans Array[0], sauf si il y a un cout << ""; dans le main avant 
    //l'appel de la méthode
     
    string Client::ParsePASV(string Response, string Array[]){
        string buff2 = Response.substr(Response.find_first_of('(')+1,Response.find(')') - Response.find('(') - 1);//taille Response pour ne garder que l'expression a decouper
        istringstream buff(buff2); //flux
        int k = 0;//compteur de mot
        for (k=0;k<6;k++)
            getline(buff,Array[k],',');//stock dans Array[k] le mot
    }
    Merci d'avance...

  2. #2
    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
    On peut voir l'appel aussi ? (Et les quelques lignes qui le précèdent)
    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.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut
    Bien sur:

    La methode qui fait appelle a ParsePASV:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void Client::GetList(){
        char RecAddr[16];
        string RecArray[5];
        int RecPort, BytesRec = SOCKET_ERROR;//Port de reception
        sockaddr_in RecService;
        string buff;
        string Response;
        Response = Client::SendFTP("PASV\r\n");//mode passif=> on receptionne le port sur lequel on va récupérer les données
     
        Client::ParsePASV(Response, RecArray); //parseur de la réponse PASV
    Et l'appel de cette methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if (client.ConnectFTP()){//a partir de ce point, l'utilisateur est loggé et connecté
     
            //cout << "";
            client.GetList();//Télécharge la liste
        }
    Si tu veu je peut aussi poster le code de ConnectFTP() que je ne met pas ici pour ne pas trop surcharger le message..

  4. #4
    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
    Tu devrais afficher Response entre l'appel à SendFTP() et celui à ParsePASV(), histoire de vérifier que c'est bien la même chaîne selon la présence ou non de l'écriture sur cout...

    PS: Si possible, affiche avec un moyen qui n'implique pas cout (MessageBox ou fonctions de stdio.h) histoire de ne pas fausser les tests...
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut
    J'ai testé avec printf(), Response est bon.
    De meme, j'ai testé la valeur de Array[k] au fur et a mesure de l'incrémentation de la boucle, tout parait bon (meme résultat que si je teste avec cout).
    Cependant, a la sortie de la boucle, lorsque je teste Array[0], il me sort soit rien du tout avec printf("%s",Array[0].c_str()) soit les abération que j'ai évoqué avec cout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (k=0;k<6;k++){
            getline(buff,Array[k],',');
            printf("%s",Array[k].c_str());
        }
        printf("%s",Array[0].c_str());
    }
    J'ai testé a tous les endroits, mais c'est a la sortie de la boucle que le probleme apparait (Array[0] vaut sa bonne valeur jusqu'a cette sortie.)

Discussions similaires

  1. [Debutant] Probleme avec BevelBorder
    Par devil26 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 09/05/2005, 09h41
  2. [debutant]probleme avec wxwidgets
    Par iwky dans le forum wxWidgets
    Réponses: 11
    Dernier message: 23/01/2005, 20h23
  3. [DEBUTANT] Probleme avec glortho
    Par barthelv dans le forum OpenGL
    Réponses: 12
    Dernier message: 23/11/2004, 14h21
  4. [DEBUTANT] probleme avec split ?
    Par matN59 dans le forum ASP
    Réponses: 6
    Dernier message: 23/10/2004, 15h47
  5. Réponses: 2
    Dernier message: 31/08/2004, 11h45

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