Namespaces
Variants

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

From cppreference.net
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

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

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> )