std::basic_istream<CharT,Traits>:: getline
|
basic_istream
&
getline
(
char_type
*
s,
std::
streamsize
count
)
;
|
(1) | |
|
basic_istream
&
getline
(
char_type
*
s,
std::
streamsize
count, char_type delim
)
;
|
(2) | |
ストリームから行末または指定された区切り文字 delim まで文字を抽出します。
最初のオーバーロードは getline ( s, count, widen ( ' \n ' ) ) と同等です。
UnformattedInputFunction として振る舞う。セントリオブジェクトを構築・チェックした後、 * this から文字を抽出し、 s が指す先頭要素を持つ配列の連続する位置に格納する。以下のいずれかの条件が発生するまで続く(表示順にテスト):
- 入力シーケンスでファイル終端条件が発生した場合。
-
次に利用可能な文字
c
が区切り文字である場合(
Traits
::
eq
(
c, delim
)
によって判定)。区切り文字は抽出されます(
basic_istream::get()とは異なり)、 gcount() にカウントされますが、保存されません。 - count が非正、または count - 1 文字が抽出された場合(この場合 setstate ( failbit ) が呼び出されます)。
関数が文字を抽出しない場合、
failbit
がローカルエラー状態に設定され、
setstate()
が呼び出される前に設定されます。
いずれの場合も、 count > 0 の場合、その後ヌル文字 CharT ( ) を配列の次の連続する位置に格納し、 gcount() を更新します。
目次 |
注記
条件 #2 が条件 #3 より前にテストされるため、バッファに正確に収まる入力行は
failbit
をトリガーしません。
終端文字は抽出された文字としてカウントされるため、空の入力行は
failbit
をトリガーしません。
パラメータ
| s | - | 文字を格納する文字列へのポインタ |
| count | - | s が指す文字列のサイズ |
| delim | - | 抽出を停止する区切り文字。抽出されるが格納されない。 |
戻り値
* this
例外
内部操作が例外をスローした場合、それは捕捉され、
badbit
が設定されます。
exceptions()
が
badbit
に対して設定されている場合、例外は再スローされます。
例
#include <array> #include <iostream> #include <sstream> #include <vector> int main() { std::istringstream input("abc|def|gh"); std::vector<std::array<char, 4>> v; // 注意: 以下のループはgetline()から返されたストリームの // std::ios_base::operator bool()がfalseを返すと終了します for (std::array<char, 4> a; input.getline(&a[0], 4, '|');) v.push_back(a); for (auto& a : v) std::cout << &a[0] << '\n'; }
出力:
abc def gh
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 531 | C++98 |
std::getline
は
count が非正の場合を 処理できなかった |
この場合、文字は
抽出されない |
関連項目
|
I/Oストリームからデータを文字列に読み込む
(関数テンプレート) |
|
|
書式化データを抽出する
(公開メンバ関数) |
|
|
文字を抽出する
(公開メンバ関数) |
|
|
文字ブロックを抽出する
(公開メンバ関数) |