- 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であったら、ローカルエラー状態に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
- readsome
- P1264R2 Revising the wording of stream input operations
- C++23でローカルエラー状態の概念が導入され、入力関数のエラー処理セマンティクスが明確化された