vfscanf_s、vfwscanf_s
stdio.h:インデックス への移動
ヘッダー ファイル
stdio.h
カテゴリ
書式付き入出力関数
プロトタイプ
int vfscanf_s(FILE * restrict stream, const char * restrict format, va_list arg);
int vfwscanf_s(FILE * restrict stream, const wchar_t * restrict format, va_list arg);
説明
vfscanf の代わりとなるもので、セキュリティが強化されています。
v...scanf 関数群は、...scanf 関数群の代替エントリ ポイントとして知られています。 対応する ...scanf 関数とちょうど同じ動作をしますが、引数リストではなく、引数リストへのポインタを受け取ります。
vfscanf_s はvfscanf と同等ですが、stream、format、%s 形式指定子に対応する arg 内の項目の妥当性に関する実行時制約が付け加えられています(ここで言及したものはすべて NULL ポインタ以外でなければなりません)。
戻り値
vfscanf_s は、スキャン、変換、格納が正常に行われた入力フィールドの数を返します。スキャンはされたが格納されなかったフィールドは、この戻り値には算入されません。 格納されたフィールドがなければ、戻り値は 0 になります。
vfscanf_s で入力エラーが発生した場合、戻り値は EOF になります。
例
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> FILE *fp; int vfsf(char *fmt, ...) { va_list argptr; int cnt; va_start(argptr, fmt); cnt = vfscanf_s(fp, fmt, argptr); va_end(argptr); return(cnt); } int main(void) { int inumber = 30; float fnumber = 90.0; char string[4] = "abc"; fp = tmpfile(); if (fp == NULL) { perror("tmpfile() call"); exit(1); } fprintf(fp,"%d %f %s\n",inumber,fnumber,string); rewind(fp); vfsf("%d %f %s",&inumber,&fnumber,string); printf("%d %f %s\n",inumber,fnumber,string); fclose(fp); return 0; }
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |