std::basic_istream<CharT,Traits>::readsome
来自cppreference.com
| |
||
从输入流提取至多 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 | - | 要读取的最大字符数 |
返回值
实际提取的字符数。
异常
在出现错误(错误状态标志不是 goodbit)并且 exceptions() 已设置为对该状态抛出时,会抛出 failure。
如果内部操作抛出了异常,那么捕获它并设置 badbit。如果 exceptions() 设置了 badbit,那么就会重抛该异常。
注解
此函数的行为是高度实现限定的。例如,对 std::ifstream 使用 readsome() 时会导致明显的实现特定的效果。某些库实现在 std::ifstream 打开文件时立即以数据填充底层 filebuf,这意味着 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> 的公开成员函数)
|