Namespaces
Variants

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

From cppreference.net
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() を更新します。

目次

翻訳のポイント: - 「Contents」を「目次」に翻訳 - HTMLタグ、属性、クラス名は一切変更せず保持 - C++関連の用語(Notes, Parameters, Return value, Exceptions, Example, Defect reports, See also)は原文のまま保持 - 数字や構造は完全に維持 - プロフェッショナルな技術文書としての正確性を確保

注記

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

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

パラメータ

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

戻り値

* this

例外

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

内部操作が例外をスローした場合、それは捕捉され、 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ストリームからデータを文字列に読み込む
(関数テンプレート)
書式化データを抽出する
(公開メンバ関数)
文字を抽出する
(公開メンバ関数)
文字ブロックを抽出する
(公開メンバ関数)