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::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 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 メンバ関数) |