std::basic_istream<CharT,Traits>::readsome
提供: cppreference.com
< cpp | io | basic istream
std::streamsize readsome( char_type* s, std::streamsize count ); | ||
最大 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 で使用するとき、いくつかのライブラリ実装ではファイルが開かれるとすぐにベースとなる filebuf をデータで埋めます (そのような実装では readsome() はデータ、場合によってはファイル全体を読み込みます) が、他の実装では実際の入出力操作が要求されたときにのみファイルから読み込みます (ファイルを開いた直後に発行した readsome() が文字を抽出することはありません)。 同様に、 std::cin.readsome() の呼び出しが保留中の未処理のコンソール入力をすべて返すこともあれば、常にゼロを返し文字を抽出しないこともあります。
[編集]例
Run this code
#include <iostream>#include <sstream> int main(){char c[10]={};std::istringstream input("This is sample text.");// std::stringbuf makes its entire// buffer available for unblocking read input.readsome(c, 5);// reads 'This ' and stores in c[0] .. c[4] input.readsome(c, 9);// reads 'is sample' and stores in c[0] .. c[8]std::cout<< c;}
出力:
is sample
[編集]関連項目
文字のブロックを抽出します (パブリックメンバ関数) | |
get 領域内の直ちに利用可能な文字数を取得します ( std::basic_streambuf<CharT,Traits> のパブリックメンバ関数) |