std::basic_istream<CharT,Traits>:: readsome
|
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
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>
)
|