名前空間
変種
操作

std::fgets

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
C形式I/O
型とオブジェクト
関数
ファイルアクセス
直接入出力
非書式化入出力
書式付き入力
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
書式付き出力
ファイルポジショニング
エラーハンドリング
ファイル操作
 
ヘッダ<cstdio>で定義
char* fgets( char* str, int count, std::FILE* stream );

指定されたファイルストリームから最大 count - 1 文字を読み取り、str が指す文字配列に格納します。解析は、改行文字が見つかった場合(この場合、str にその改行文字が含まれます)、またはファイル終端に達した場合に停止します。バイトが読み取られ、エラーが発生しなかった場合、str に書き込まれた最後の文字の直後の位置にヌル文字を書き込みます。

目次

[編集] パラメーター

str - 文字配列の要素へのポインター
count - 書き込む文字の最大数(通常は str の長さ)
stream - データを読み取るファイルストリーム

[編集] 戻り値

成功した場合は str、失敗した場合はヌルポインター。

ファイル終端条件に遭遇した場合、stream の *eof* インジケーターを設定します (std::feof() を参照)。これは、バイトが読み取られない原因となった場合にのみ失敗と見なされ、その場合はヌルポインターが返され、str が指す配列の内容は変更されません(つまり、最初のバイトはヌル文字で上書きされません)。

失敗が他のエラーによって引き起こされた場合、stream の *error* インジケーターを設定します (std::ferror() を参照)。str が指す配列の内容は不定です(ヌル終端されていない可能性もあります)。

[編集] 備考

POSIXはさらに、ファイル終端条件以外の失敗に遭遇した場合、fgetserrno を設定することを要求しています。

count <= 1 の場合の標準仕様は不明瞭ですが、一般的な実装では次のようになります。

  • count < 1 の場合、何もしない、エラーを報告する。
  • count == 1 の場合、
  • 一部の実装では何もしない、エラーを報告する。
  • 他の実装では何も読み取らず、str[0] にゼロを格納し、成功を報告する。

[編集]

#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <span>
 
void dump(std::span<const char> buf, std::size_t offset)
{
    std::cout << std::dec;
    for (char ch : buf)
        std::cout << (ch >= ' ' ? ch : '.'), offset--;
    std::cout << std::string(offset, ' ') << std::hex
              << std::setfill('0') << std::uppercase;
    for (unsigned ch : buf)
        std::cout << std::setw(2) << ch << ' ';
    std::cout << std::dec << '\n';
}
 
int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Alan Turing\n", tmpf);
    std::fputs("John von Neumann\n", tmpf);
    std::fputs("Alonzo Church\n", tmpf);
 
    std::rewind(tmpf);
    for (char buf[8]; std::fgets(buf, sizeof buf, tmpf) != nullptr;)
        dump(buf, 10);
}

出力

Alan Tu.  41 6C 61 6E 20 54 75 00 
ring..u.  72 69 6E 67 0A 00 75 00 
John vo.  4A 6F 68 6E 20 76 6F 00 
n Neuma.  6E 20 4E 65 75 6D 61 00 
nn..uma.  6E 6E 0A 00 75 6D 61 00 
Alonzo .  41 6C 6F 6E 7A 6F 20 00 
Church..  43 68 75 72 63 68 0A 00

[編集] 関連項目

stdin、ファイルストリーム、またはバッファから書式付き入力を読み取ります。
(関数) [編集]
(C++11で非推奨)(C++14で削除)
stdinから文字列を読み取る
(関数) [編集]
ファイルストリームに文字列を書き込む
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)