vscanf_s、vwscanf_s
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_s は scanf_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++ |
---|---|---|---|
+ |
+ |
+ |