vfscanf_s、vfwscanf_s

提供: RAD Studio
移動先: 案内検索

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_svfscanf と同等ですが、streamformat%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++

+

+

+

関連項目