Namespaces
Variants

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

From cppreference.net
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 if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

内部操作が例外をスローした場合、それは捕捉され、 badbit が設定されます。 exceptions() badbit に対して設定されている場合、例外は再スローされます。

注記

この関数の動作は実装に大きく依存します。例えば、 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 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> の公開メンバ関数)