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

先頭へ戻る

fgetws関数

概要 ファイルからワイド文字列を1行受け取る。
ヘッダ stdio.hwchar.h
形式 wchar_t* fgetws(wchar_t* s, int n, FILE* 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)
{
    FILE* fpIn;
    FILE* fpOut;
    wchar_t str[80];

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

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

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

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

    return 0;
}

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

1行目
2行目
3行目

実行結果(out.txt)

1行目
2行目
3行目
関連 この関数は、fgets関数ワイド文字版である。
解説章


参考リンク

更新履歴

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

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

'2018/1/22 新規作成。





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

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

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

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS