vfscanf_s、vfwscanf_svfscanf_s, vfwscanf_s

ストリームから書式化されたデータを読み出します。Reads formatted data from a stream. これらのバージョンの vfscanf、vfwscanf は、「CRT のセキュリティ機能」の説明にあるとおり、セキュリティが強化されたバージョンです。These versions of vfscanf, vfwscanf have security enhancements, as described in Security Features in the CRT.

構文Syntax

int vfscanf_s(
   FILE *stream,
   const char *format,
   va_list arglist
);
int vfwscanf_s(
   FILE *stream,
   const wchar_t *format,
   va_list arglist
);

パラメーターParameters

streamstream
FILE 構造体へのポインター。Pointer to FILE structure.

formatformat
書式指定文字列。Format-control string.

arglistarglist
可変個引数リスト。Variable argument list.

戻り値Return Value

これらの関数は、正常に変換および代入されたフィールドの数を返します。読み込まれただけで代入されなかったフィールドは戻り値には含まれません。Each of these functions returns the number of fields that are successfully converted and assigned; the return value does not include fields that were read but not assigned. 戻り値が 0 の場合は、代入されたフィールドがなかったことを示します。A return value of 0 indicates that no fields were assigned. エラーが発生した場合、または戻り値は、ファイル ストリームの末尾に達した場合は、最初の変換の前に、 EOFvfscanf_svfwscanf_sします。If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for vfscanf_s and vfwscanf_s.

これらの関数では、パラメーターの検証が行われます。These functions validate their parameters. 場合ストリームは無効なファイル ポインターの場合、または形式null ポインターの場合は、」の説明に従って、これらの関数は、無効なパラメーター ハンドラーを呼び出しますパラメーターの検証です。If stream is an invalid file pointer, or format is a null pointer, these functions invoke the invalid parameter handler, as described in Parameter Validation. これらの関数を返すかどうかは、引き続き実行が許可された、 EOF設定とerrnoEINVALします。If execution is allowed to continue, these functions return EOF and set errno to EINVAL.

RemarksRemarks

Vfscanf_s関数は、の現在位置からデータを読み取るストリームで指定されている場所に、 arglist引数リスト (ある場合)。The vfscanf_s function reads data from the current position of stream into the locations that are given by the arglist argument list (if any). リスト内の各引数は型指定子に対応する型の変数へのポインターである必要があります形式します。Each argument in the list must be a pointer to a variable of a type that corresponds to a type specifier in format. 形式コントロール入力の解釈のフィールドし、同じ形式し、機能、形式引数scanf_s; を参照してください書式指定フィールド。scanf 関数と wscanf 関数の説明については形式します。format controls the interpretation of the input fields and has the same form and function as the format argument for scanf_s; see Format Specification Fields: scanf and wscanf Functions for a description of format. vfwscanf_sのワイド文字バージョンは、 vfscanf_s; 引数 format vfwscanf_sはワイド文字列です。vfwscanf_s is a wide-character version of vfscanf_s; the format argument to vfwscanf_s is a wide-character string. ストリームが ANSI モードで開かれている場合、これらの関数の動作は同じになります。These functions behave identically if the stream is opened in ANSI mode. vfscanf_s UNICODE ストリームからの入力を現在サポートされていません。vfscanf_s doesn't currently support input from a UNICODE stream.

安全な関数の主な違い (がある、 _sサフィックス) 他のバージョンがより安全な関数が各文字のサイズを必要としてcCsS、および [ 直後、変数を引数として渡される型のフィールド。The main difference between the more secure functions (that have the _s suffix) and the other versions is that the more secure functions require the size in characters of each c, C, s, S, and [ type field to be passed as an argument immediately following the variable. 詳細については、「scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l」と「scanf 関数の文字幅指定」を参照してください。For more information, see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l and scanf Width Specification.

注意

型のサイズのパラメーターが符号なしではなく、 size_tします。The size parameter is of type unsigned, not size_t.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_vftscanf_s_vftscanf_s vfscanf_svfscanf_s vfscanf_svfscanf_s vfwscanf_svfwscanf_s

必要条件Requirements

関数Function 必須ヘッダーRequired header
vfscanf_svfscanf_s <stdio.h><stdio.h>
vfwscanf_svfwscanf_s <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_vfscanf_s.c
// compile with: /W3
// This program writes formatted
// data to a file. It then uses vfscanf_s to
// read the various data back from the file.

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

FILE *stream;

int call_vfscanf_s(FILE * istream, char * format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vfscanf_s(istream, format, arglist);
    va_end(arglist);
    return result;
}

int main(void)
{
    long l;
    float fp;
    char s[81];
    char c;

    if (fopen_s(&stream, "vfscanf_s.out", "w+") != 0)
    {
        printf("The file vfscanf_s.out was not opened\n");
    }
    else
    {
        fprintf(stream, "%s %ld %f%c", "a-string",
            65000, 3.14159, 'x');
        // Security caution!
        // Beware loading data from a file without confirming its size,
        // as it may lead to a buffer overrun situation.

        // Set pointer to beginning of file:
        fseek(stream, 0L, SEEK_SET);

        // Read data back from file:
        call_vfscanf_s(stream, "%s %ld %f%c", s, _countof(s), &l, &fp, &c, 1);

        // Output data read:
        printf("%s\n", s);
        printf("%ld\n", l);
        printf("%f\n", fp);
        printf("%c\n", c);

        fclose(stream);
    }
}
a-string
65000
3.141590
x

関連項目See also

ストリーム入出力Stream I/O
_cscanf_s、_cscanf_s_l、_cwscanf_s、_cwscanf_s_l_cscanf_s, _cscanf_s_l, _cwscanf_s, _cwscanf_s_l
fprintf_s、_fprintf_s_l、fwprintf_s、_fwprintf_s_lfprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l
scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_lscanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
sscanf_s、_sscanf_s_l、swscanf_s、_swscanf_s_lsscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
fscanf、_fscanf_l、fwscanf、_fwscanf_lfscanf, _fscanf_l, fwscanf, _fwscanf_l
vfscanf、vfwscanfvfscanf, vfwscanf