Namespaces
Variants

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

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

Извлекает до count символов, доступных немедленно из входного потока. Извлеченные символы сохраняются в массив символов, на который указывает s .

Ведут себя как UnformattedInputFunction . После создания и проверки сторожевого объекта,

  • Если rdbuf ( ) - > in_avail ( ) == - 1 , вызывает setstate ( eofbit ) и не извлекает символы.
  • Если rdbuf ( ) - > in_avail ( ) == 0 , не извлекает символы.
  • Если rdbuf ( ) - > in_avail ( ) > 0 , извлекает std:: min ( rdbuf ( ) - > in_avail ( ) , count ) символов и сохраняет их в последовательные ячейки массива символов, первый элемент которого указывается s .

Содержание

Параметры

s - указатель на массив символов для хранения считываемых символов
count - максимальное количество символов для чтения

Возвращаемое значение

Количество фактически извлечённых символов.

Исключения

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

Если внутренняя операция выбрасывает исключение, оно перехватывается и badbit устанавливается. Если exceptions() установлен для badbit , исключение выбрасывается повторно.

Примечания

Поведение этой функции сильно зависит от реализации. Например, использование readsome() с std::ifstream приводит к значительным, зависящим от реализации результатам. Некоторые реализации библиотеки заполняют базовый filebuf данными сразу после того, как std::ifstream открывает файл, что означает, что readsome() всегда читает данные и может даже прочитать весь файл. С другими реализациями, std::ifstream читает из файла только при вызове операции ввода, что означает, что вызов readsome() сразу после открытия файла никогда не извлекает никаких символов. Аналогично, вызов std:: cin . readsome ( ) может вернуть все ожидающие, необработанные вводы с консоли или может всегда возвращать ноль и не извлекать никаких символов.

Пример

#include <cassert>
#include <iostream>
#include <sstream>
int main()
{
    char c[10] = "*********"; // c[9] == '\0'
    // std::stringbuf делает весь свой буфер доступным для неблокирующего чтения
    std::istringstream input("This is sample text.");
    auto r = input.readsome(c, 5); // читает 'This ' и сохраняет в c[0] .. c[4]
    assert(r == 5);
    std::cout << c << '\n';
    r = input.readsome(c, 9); // читает 'is sample' и сохраняет в c[0] .. c[8]
    assert(r == 9);
    std::cout << c << '\n';
}

Вывод:

This ****
is sample

Смотрите также

извлекает блоки символов
(публичная функция-член)
получает количество символов, немедленно доступных в области получения
(публичная функция-член std::basic_streambuf<CharT,Traits> )