std::basic_istream<CharT,Traits>::readsome
来自cppreference.com
< cpp | io | basic istream
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 | - | 要读取的最大字符数 |
返回值
实际提取的字符数。
异常
如果内部操作抛出了异常,那么捕获它并设置 badbit。如果 exceptions() 设置了 badbit
,那么就会重抛该异常。
注解
此函数的行为是高度实现限定的。例如,以 std::ifstream 使用时,某些库实现在文件打开时立即以数据填充底层 filebuf
(而这种实现上 readsome() 读取的数据潜在地,但不必为整个文件),而其他实现仅在请求实际输入操作时从文件读取(而文件打开后立即作出的 readsome() 从不提取任何字符)。类似地,调用 std::cin.readsome() 可能返回所有悬置的未处理控制台输入,或可能始终返回零并且不提取字符。
示例
运行此代码
#include <iostream> #include <sstream> int main() { char c[10] = {}; std::istringstream input("This is sample text."); // std::stringbuf 令其整个缓冲区 // 可用于无阻塞读取 input.readsome(c, 5); // 读取 'This ' 并存储于 c[0] .. c[4] input.readsome(c, 9); // 读取 'is sample' 并存储于 c[0] .. c[8] std::cout << c; }
输出:
is sample
参阅
按区块提取字符 (公开成员函数) | |
获得获取区中立即可用的字符数 ( std::basic_streambuf<CharT,Traits> 的公开成员函数) |