std::basic_istream<CharT,Traits>:: readsome
|
std::
streamsize
readsome
(
char_type
*
s,
std::
streamsize
count
)
;
|
||
Extrae hasta count caracteres inmediatamente disponibles del flujo de entrada. Los caracteres extraídos se almacenan en el array de caracteres apuntado por s .
Se comporta como una UnformattedInputFunction . Después de construir y verificar el objeto centinela,
- Si rdbuf ( ) - > in_avail ( ) == - 1 , llama a setstate ( eofbit ) y no extrae ningún carácter.
- Si rdbuf ( ) - > in_avail ( ) == 0 , no extrae ningún carácter.
- Si rdbuf ( ) - > in_avail ( ) > 0 , extrae std:: min ( rdbuf ( ) - > in_avail ( ) , count ) caracteres y los almacena en ubicaciones sucesivas del array de caracteres cuyo primer elemento está apuntado por s .
Contenidos |
Parámetros
| s | - | puntero al arreglo de caracteres para almacenar los caracteres |
| count | - | número máximo de caracteres a leer |
Valor de retorno
El número de caracteres realmente extraídos.
Excepciones
Si una operación interna lanza una excepción, esta es capturada y se establece
badbit
. Si
exceptions()
está configurado para
badbit
, la excepción se relanza.
Notas
El comportamiento de esta función es altamente dependiente de la implementación. Por ejemplo, usar
readsome()
con
std::ifstream
conduce a resultados significativos y específicos de la implementación. Algunas implementaciones de bibliotecas llenan el
filebuf
subyacente con datos tan pronto como
std::ifstream
abre un archivo, lo que significa que
readsome()
siempre lee datos e incluso podría leer el archivo completo. Con otras implementaciones,
std::ifstream
solo lee de un archivo cuando se invoca una operación de entrada, lo que significa que llamar a
readsome()
inmediatamente después de abrir el archivo nunca extrae ningún carácter. De manera similar, llamar a
std::
cin
.
readsome
(
)
puede devolver toda la entrada de consola pendiente y no procesada, o puede siempre devolver cero y no extraer ningún carácter.
Ejemplo
#include <cassert> #include <iostream> #include <sstream> int main() { char c[10] = "*********"; // c[9] == '\0' // std::stringbuf makes its entire buffer available for unblocking read std::istringstream input("This is sample text."); auto r = input.readsome(c, 5); // reads 'This ' and stores in c[0] .. c[4] assert(r == 5); std::cout << c << '\n'; r = input.readsome(c, 9); // reads 'is sample' and stores in c[0] .. c[8] assert(r == 9); std::cout << c << '\n'; }
Salida:
This **** is sample
Véase también
|
extrae bloques de caracteres
(función miembro pública) |
|
|
obtiene el número de caracteres inmediatamente disponibles en el área de obtención
(función miembro pública de
std::basic_streambuf<CharT,Traits>
)
|