Namespaces
Variants

std::basic_istream<CharT,Traits>:: readsome

From cppreference.net
std:: streamsize readsome ( char_type * s, std:: streamsize count ) ;

Extrait jusqu'à count caractères immédiatement disponibles du flux d'entrée. Les caractères extraits sont stockés dans le tableau de caractères pointé par s .

Se comporte comme une UnformattedInputFunction . Après la construction et la vérification de l'objet sentinelle,

  • Si rdbuf ( ) - > in_avail ( ) == - 1 , appelle setstate ( eofbit ) et n'extrait aucun caractère.
  • Si rdbuf ( ) - > in_avail ( ) == 0 , n'extrait aucun caractère.
  • Si rdbuf ( ) - > in_avail ( ) > 0 , extrait std:: min ( rdbuf ( ) - > in_avail ( ) , count ) caractères et les stocke dans des emplacements successifs du tableau de caractères dont le premier élément est pointé par s .

Table des matières

Paramètres

s - pointeur vers le tableau de caractères pour stocker les caractères
count - nombre maximum de caractères à lire

Valeur de retour

Le nombre de caractères effectivement extraits.

Exceptions

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

Si une opération interne lève une exception, elle est capturée et badbit est défini. Si exceptions() est défini pour badbit , l'exception est relancée.

Notes

Le comportement de cette fonction est hautement spécifique à l'implémentation. Par exemple, l'utilisation de readsome() avec std::ifstream conduit à des résultats significatifs et spécifiques à l'implémentation. Certaines implémentations de bibliothèque remplissent le filebuf sous-jacent avec des données dès que std::ifstream ouvre un fichier, ce qui signifie que readsome() lit toujours des données et pourrait même lire l'intégralité du fichier. Avec d'autres implémentations, std::ifstream ne lit à partir d'un fichier que lorsqu'une opération d'entrée est invoquée, ce qui signifie qu'appeler readsome() immédiatement après l'ouverture du fichier n'extrait jamais aucun caractère. De même, l'appel de std:: cin . readsome ( ) peut retourner toutes les entrées console en attente et non traitées, ou peut toujours retourner zéro et n'extraire aucun caractère.

Exemple

#include <cassert>
#include <iostream>
#include <sstream>
int main()
{
    char c[10] = "*********"; // c[9] == '\0'
    // std::stringbuf rend l'intégralité de son tampon disponible pour la lecture non bloquante
    std::istringstream input("This is sample text.");
    auto r = input.readsome(c, 5); // lit 'This ' et stocke dans c[0] .. c[4]
    assert(r == 5);
    std::cout << c << '\n';
    r = input.readsome(c, 9); // lit 'is sample' et stocke dans c[0] .. c[8]
    assert(r == 9);
    std::cout << c << '\n';
}

Sortie :

This ****
is sample

Voir aussi

extrait des blocs de caractères
(fonction membre publique)
obtient le nombre de caractères immédiatement disponibles dans la zone de lecture
(fonction membre publique de std::basic_streambuf<CharT,Traits> )