名前空間
変種
操作

std::basic_istream<CharT,Traits>::getline

From cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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 が指す配列の連続する場所に格納します。ただし、以下のいずれかが発生するまで(以下の順序でテストされます)。

  1. 入力シーケンスでファイルの終端条件が発生する。
  2. 次の利用可能な文字 c が区切り文字である(Traits::eq(c, delim) によって決定される)。区切り文字は抽出され(basic_istream::get() とは異なり)、gcount() にカウントされますが、格納はされません。
  3. count が非正であるか、count - 1 文字が抽出された(この場合、setstate(failbit) が呼び出される)。

関数が文字を一切抽出しない場合、failbit はローカルエラー状態に設定されてから、setstate() が呼び出されます。

いずれの場合も、count > 0 であれば、次に続く配列の場所にヌル文字 CharT() を格納し、gcount() を更新します。

目次

[編集] 注記

条件 #2 は条件 #3 より先にテストされるため、バッファにちょうど収まる入力行は failbit をトリガーしません。

終端文字は抽出された文字としてカウントされるため、空の入力行は failbit をトリガーしません。

[編集] パラメータ

s - 文字を格納する文字配列へのポインタ
count - s が指す文字配列のサイズ
delim - 抽出を停止する区切り文字。抽出されますが、格納されません。

[編集] 戻り値

*this

[編集] 例外

failure: エラーが発生した場合(エラー状態フラグが goodbit ではない)で、exceptions() がその状態に対してスローするように設定されている場合。

内部操作が例外をスローした場合、それはキャッチされ、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;
 
    // note: the following loop terminates when std::ios_base::operator bool()
    // on the stream returned from getline() returns 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ストリームから文字列にデータを読み込む
(function template) [編集]
書式付きデータを抽出する
(public member function) [編集]
文字を抽出する
(public member function) [編集]
文字のブロックを抽出する
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)