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++ |
|---|---|---|---|
|
+ |
+ |
+ |