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