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

SL & STL C++ Discussion :

[STL] pb avec in_avail()


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut [STL] pb avec in_avail()
    Bonjour,

    j'ai quelque pb avec in_avail(), je comprend pas comment l'utiliser comme je voudrais ... elle me retourne toujours 1 ou 0 ????

    voici un petit prg de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	streamsize i;
    	vector<char> v;
    	stringstream ss;
     
    	ss << "toto" << 123;
    	i = ss.rdbuf()->in_avail(); // retourne 1 ??
    	v.resize( i );
    	ss.rdbuf()->sgetn( &v[0], i );
    	i = ss.rdbuf()->in_avail(); // retourne 0 ??
    Fais-je quelquechose de mal ?

  2. #2
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Pas de réponse...
    Dois-je en conclure que la réponse est trop simple, où que la réponse existe dans FAQ (dans ce cas, toutes mes excuses), où que je suis trop impatient ?

    NB: j'utilise VC8.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    où que je suis trop impatient ?
    Vraissemblablement

  4. #4
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    En observant comment le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	stringstream ss2;
    	ss2 << "toto" << 123;
    	istreambuf_iterator<char> ite( ss2 );
    	while( ite != istreambuf_iterator<char>() )
    	{
    		back_inserter( v ) = *ite;
    		++ite;
    	}
    on s'aperçoit que toute la magie réside dans la fonction underflow()

    donc, en modifiant le premier exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	ss << "toto" << 123;
    	i = ss.rdbuf()->in_avail(); // i contient 1
    	v.resize( i );
    	ss.rdbuf()->sgetn( &v[0], i );
    	ss.rdbuf()->sgetc();
    	i = ss.rdbuf()->in_avail(); // i contient maintenant 6
    j'obtiens le résultat escompté, mais c'est pas joli joli...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    c'est surtout que ton exemple semble bon et que faut une bonne connaissance
    du stringstream et stringbuf pour te repondre.

    1) question: pourquoi mettre une string dans un vector de char ?
    tu peux pas directement utiliser str() ?
    2) quel est le caractere que tu lis ? ne faut il pas que tu flush le stream pour que rdbuf te donne le debut du tableau ou un truc comme ca?

  6. #6
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Citation Envoyé par alskaar
    1) question: pourquoi mettre une string dans un vector de char ?
    Pour l'exemple... disons que ce que j'utilise n'est pas forcément un flux de caractères.
    Citation Envoyé par alskaar
    2) quel est le caractere que tu lis ? ne faut il pas que tu flush le stream pour que rdbuf te donne le debut du tableau ou un truc comme ca?
    Je lis le 1er caractère 't', puis dans mon 2ième exemple "oto123".
    donc le pointeur de lecture du flux est bien positionné.

    Quand on décortique stringstream, on s'aperçoit, dans le 1er exemple, que la variable contenant le nombre de caractères à lire est mis à 1 puis jamais recalculée et donc retourne 0.
    Dans le 2ième, sgetc() appelle underflow() qui, elle, met à jour la variable.

    Soit je me suis complètement fourvoyé, soit y'a comme un loup...

Discussions similaires

  1. pb dans la stl::list avec size
    Par DEVfan dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/01/2007, 18h35
  2. STL : problème avec un iterateur
    Par fabienpot dans le forum SL & STL
    Réponses: 4
    Dernier message: 06/09/2006, 09h06
  3. [STL]Problème avec map
    Par mambo dans le forum SL & STL
    Réponses: 11
    Dernier message: 27/07/2006, 15h39
  4. Probleme avec la STL(vector) avec code C
    Par Benjy dans le forum SL & STL
    Réponses: 12
    Dernier message: 06/04/2006, 12h54
  5. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43

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