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

先頭へ戻る

vfscanf関数

概要 任意のストリームから、変換指定を伴った文字列を受け取る。
ヘッダ stdio.h
形式 int vfscanf(FILE* stream, const char* format, va_list arg);
引数 stream 対象のストリーム。
format 変換指定を伴った文字列。
arg format に含まれている変換指定子に対応した、可変個引数リスト。
戻り値 変換を1つも行えないまま入力エラーが起きた場合は、EOF を返す。その他の場合には、正常に代入を行えた個数を返す。
詳細 引数... が va_list に変わっていること以外は、fscanf関数と同様であり、同じ機能を持つ。
変換指定の詳細については、scanf関数を参照。
注意 第3引数に渡す va_list型のオブジェクトは、事前に va_start による初期化が必要である。
必要な個数の実引数が指定されていない場合の動作は未定義。余分に指定されている場合には、評価は行われるが、vfscanf関数としては無視する。
使用例
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <assert.h>

static void checked_input(FILE* fp, int count, const char* format, ...)
{
    va_list args;

    va_start( args, format );
    if( vfscanf( fp, format, args ) != count ){
        assert("vfscanf error");
    }
    va_end( args );
}

int main(void)
{
    FILE* fp;
    int num;
    char str[10];
    double f;

    fp = fopen( "test.txt", "r" );
    if( fp == NULL ){
        exit( EXIT_FAILURE );
    }

    checked_input( fp, 3, "%d %s %lf", &num, str, &f );
    printf( "%d %s %f\n", num, str, f );

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

    return 0;
}

入力ファイル (test.txt):

100 abc 2.500000

実行結果

100 abc 2.500000
関連 ワイド文字版の vfwscanf関数がある。
標準入力に特化した vscanf関数がある。対象が文字の配列の場合は、vsscanf関数を使う。
va_list の代わりに、... を用いたバージョンとして、fscanf関数がある。
解説章


参考リンク

更新履歴

'2018/4/19 全体的に文章を見直し修正。

'2018/2/1 C言語編全体で表記を統一するため、「フォーマット指定」を「変換指定」に改めた。

'2018/1/22 新規作成。





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

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

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

Programming Place Plus のトップページへ


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