std::basic_istream<CharT,Traits>:: readsome
|
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 | - | максимальное количество символов для чтения |
Возвращаемое значение
Количество фактически извлечённых символов.
Исключения
Если внутренняя операция выбрасывает исключение, оно перехватывается и
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>
)
|