fgetws | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


fgetws関数

概要

ファイルからワイド文字列を1行受け取る。

ヘッダ

stdio.hwchar.h

形式

wchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict stream);

引数

s

入力文字列を受け取る配列を指すポインタ。

n

引数s が指す配列の要素数。

stream

入力ストリーム。

戻り値

成功時は 引数s を返す。読み取りエラーの発生時や、配列に1文字も読み取らなかった場合は、ヌルポインタが返される。

詳細

改行文字を読み取ったとき、あるいは、ファイルの終わりに達したときに読み込みを終える。ただし、引数n - 1文字分までしか読み取らない。改行文字を読み取った場合は、それも配列に書き込まれる。いずれにしても、配列に格納された最後の文字の後ろに、ヌル文字(L’\0’) が付加される。

引数stream にstdinを指定することで、標準入力から受け取ることも可能である。

注意

読み取りエラーが発生した場合、引数s が指す配列の要素の状態は不定であるから参照してはならない。
また、規格文書の fgetws関数の項目は不明確な点があり、エラー指示子やファイル終了指示子をセットするのかどうかの記述がない(fgetwc関数には記述があるのだが)。とはいえ、それぞれの指示子の意味から察するに、恐らくそれぞれセットされると思われる。

使用例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main(void)
{
    // 以下の fopen関数の第2引数は、Visual Studio 2017 の機能を使っている。
    // 「, ccs=***」のような表記によって、開かれたストリームに入出力するデータを、
    // そのエンコーディング形式で変換する。

    FILE* fp_in = fopen("test.txt", "r, ccs=UTF-16LE");
    if (fp_in == NULL) {
        fputs("ファイルオープンに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

    FILE* fp_out = fopen("out.txt", "w, ccs=UTF-16LE");
    if (fp_out == NULL) {
        fputs("ファイルオープンに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

    for (;;) {
        wchar_t str[80];

        if (fgetws(str, sizeof(str) / sizeof(str[0]), fp_in) == NULL) {
            if (feof(fp_in)) {
                // ファイルの終わり
                break;
            }
            else {
                fputs("エラーが発生しました。\n", stderr);
                exit(EXIT_FAILURE);
            }
        }
        fwprintf(fp_out, L"%ls", str);
    }

    if (fclose(fp_out) == EOF) {
        fputs("ファイルクローズに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }
    if (fclose(fp_in) == EOF) {
        fputs("ファイルクローズに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }
}

入力ファイル(test.txt)※UTF-16 (LE)

1行目
2行目
3行目

実行結果(out.txt)

1行目
2行目
3行目

関連

この関数は、fgets関数ワイド文字版である。

解説章


参考リンク


更新履歴

’2019/2/12 VisualStudio 2015 の対応終了。

’2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

’2018/4/7 「詳細」「注意」「使用例」を大幅に修正。
「使用例」を書き換えた。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る