- istream[meta header]
- std[meta namespace]
- basic_istream[meta class]
- function[meta id-type]
basic_istream<CharT, Traits>& read(char_type* s, streamsize n);
(非書式化入力関数)ストリームから指定した数の文字を入力する。
実引数として配列要素へのポインタs
とその要素数n
を受け取る。
get
メンバ関数などと異なり、s
の末尾にヌル文字を書き込む処理がない。
また、n
文字より少ない段階でEOFに達した場合を入力失敗として扱う(failbit
を立てる)点も、他の多くのメンバ関数と異なる。
sentry
オブジェクトを構築する。sentry
オブジェクトが失敗を示した場合、何もしない。good
()
メンバ関数を呼び出してfalse
であったら、setstate
(
failbit
)
を呼び出して終了する。- 以下のいずれかを満たすまで、文字を入力して書き込む。
*this
#include <iostream>
int main() {
char s[8];
std::cin.read(s, sizeof s);
auto size = std::cin.gcount();
std::cout.write(s, size);
std::cout << std::endl;
}
- read[color ff0000]
- std::cin[link /reference/iostream/cin.md]
- gcount()[link gcount.md]
- write[link /reference/ostream/basic_ostream/write.md]
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;
}
- iostate[link ../../ios/ios_base/type-iostate.md]
- failbit[link ../../ios/ios_base/type-iostate.md]
- eofbit[link ../../ios/ios_base/type-iostate.md]
- sentry[link sentry.md]
- good[link ../../ios/basic_ios/good.md]
- setstate[link ../../ios/basic_ios/setstate.md]
- C++98