basic_istream<CharT, Traits>& read(char_type* s, streamsize n);
概要
(非書式化入力関数)ストリームから指定した数の文字を入力する。
実引数として配列要素へのポインタs
とその要素数n
を受け取る。
get
メンバ関数などと異なり、s
の末尾にヌル文字を書き込む処理がない。
また、n
文字より少ない段階でEOFに達した場合を入力失敗として扱う(failbit
を立てる)点も、他の多くのメンバ関数と異なる。
効果
sentry
オブジェクトを構築する。sentry
オブジェクトが失敗を示した場合、何もしない。good()
メンバ関数を呼び出してfalse
であったら、setstate(failbit)
を呼び出して終了する。- 以下のいずれかを満たすまで、文字を入力して書き込む。
戻り値
*this
例
入力
ShinjukuNishiguchi
出力
Shinjuku
実装例
basic_istream<CharT, Traits>& read(char_type* s, streamsize n) {
iostate state = goodbit;
try {
const sentry sent(*this, true);
if (sent) {
if (good()) {
for (streamsize i = 0; i < n; ++i) {
auto c = rdbuf()->sbumpc();
if (c == Traits::eof()) {
state |= failbit | eofbit;
break;
}
s[i] = Traits::to_char_type(c);
}
} else {
state |= failbit;
}
}
} catch (...) {
例外を投げずにbadbitを設定する;
if ((exceptions() & badbit) != 0) {
throw;
}
}
setstate(state);
return *this;
}
バージョン
言語
- C++98