vscanf_s、vwscanf_s

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

stdio.h:インデックス への移動



ヘッダー ファイル

stdio.h

カテゴリ

書式付き入出力関数

プロトタイプ

int vscanf_s(const char * restrict format, va_list arg);

int vwscanf_s(const wchar_t * restrict format, va_list arg);

説明

vscanf の代わりとなるもので、セキュリティが強化されています。

メモ: Win32 GUI アプリケーションでは、この関数を使用しないでください。

v...scanf 関数群は、...scanf 関数群の代替エントリ ポイントとして知られています。 対応する ...scanf 関数とちょうど同じ動作をしますが、引数リストではなく、引数リストへのポインタを受け取ります。

vscanf_s は、stdin から読み取りながら、入力フィールドの並びを一度に 1 文字ずつスキャンします。 その後、format で指定された書式文字列で vscanf に渡された形式指定子に従って、各フィールドが書式付けされます。 最後に、vscanf_s は、入力を書式付けしたものを、引数リストで渡されたアドレスに格納します。 形式指定子とアドレスの数は、入力フィールドの数と同じでなければなりません。

vscanf_s は、いくつかの理由で、通常のフィールド終端(ホワイトスペース)文字に達する前に特定フィールドのスキャンを中止する場合や、完全に処理を終了する場合があります。 考えられる原因については、scanf を参照してください。

vscanf_sscanf_s、wscanf_s と同等ですが、可変引数リストの代わりに arg が使用されます。 vscanf_s 関数は va_end マクロを呼び出しません。

戻り値

vscanf は、スキャン、変換、格納が正常に行われた入力フィールドの数を返します。スキャンはされたが格納されなかったフィールドは、この戻り値には算入されません。 格納されたフィールドがなければ、戻り値はゼロになります。

エラーが発生した場合、戻り値は EOF マクロの値になります。

#include <stdio.h>
#include <stdarg.h>
int vscnf(char *fmt, ...)
{
   va_list argptr;
   int cnt;
   printf("Enter an integer, a float, and a string (e.g. i,f,s,)\n");
   va_start(argptr, fmt);
   cnt = vscanf_s(fmt, argptr);
   va_end(argptr);
   return(cnt);
}
int main(void)
{
   int inumber;
   float fnumber;
   char string[80];
   vscnf("%d, %f, %s", &inumber, &fnumber, string);
   printf_s("%d %f %s\n", inumber, fnumber, string);
   return 0;
}

移植性

POSIX Win32 ANSI C ANSI C++

+

+

+

関連項目