std::basic_istream<CharT,Traits>::readsome
std::streamsize readsome( char_type* s, std::streamsize count ); |
Извлекает из входного потока до count немедленно доступных символов. Извлечённые символы сохраняются в массиве символов, на который указывает s.
Ведёт себя как UnformattedInputFunction. После создания и проверки объекта sentry:
- Если
rdbuf()->in_avail() == -1, вызываетsetstate(eofbit)и не извлекает символы. - Если
rdbuf()->in_avail() == 0, не извлекает символы. - Если
rdbuf()->in_avail() > 0, извлекаетstd::min(rdbuf()->in_avail(), count)символов и сохраняет их в последовательных элементах массива символов, первый элемент которого находится по адресуs.
Параметры
| s | - | указатель на массив символов, в который будут сохранены символы |
| count | - | максимальное количество символов для чтения |
Возвращаемое значение
Количество фактически извлечённых символов.
Исключения
failure, если произошла ошибка (флаг состояния ошибки не равен goodbit) и для этого состояния установлен exceptions(), вызывающий исключение.
Если внутренняя операция выбрасывает исключение, оно перехватывается, а badbit устанавливается. Если для badbit установлен exceptions(), исключение выбрасывается повторно.
Примечания
Поведение этой функции в значительной степени зависит от реализации. Например, использование 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 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';
}
Вывод:
This **** is sample
См. также
| извлекает блоки символов (открытая функция-член) |
|
| получает количество символов, немедленно доступных в области извлечения (открытая функция-член std::basic_streambuf<CharT,Traits>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/readsome