名前空間
変種
操作

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

From 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 が設定されます。exceptions()badbit に対して設定されている場合、例外は再スローされます。

[編集] 注釈

この関数の動作は、実装に大きく依存します。たとえば、 std::ifstreamreadsome() を使用すると、実装固有の顕著な結果が得られます。一部のライブラリ実装では、 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

[編集] 関連項目

文字のブロックを抽出する
(public member function) [編集]
取得領域ですぐに利用可能な文字数を取得する
(std::basic_streambuf<CharT,Traits> の public メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)