命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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 如果发生错误(错误状态标志不是 goodbit)并且 exceptions() 设置为抛出该状态。

如果内部操作抛出异常,则会捕获该异常,并将 badbit 设置为 true。如果 exceptions()badbit 设置,则会重新抛出异常。

[编辑] 注释

此函数的行为高度依赖于实现。例如,使用 readsome()std::ifstream 会导致显著的、特定于实现的结果。一些库实现会在 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 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> 的公共成员函数) [编辑]