vfprintf_s、vfwprintf_s
stdio.h:インデックス への移動
ヘッダー ファイル
stdio.h
カテゴリ
書式付き入出力関数
プロトタイプ
int vfprintf_s(FILE * restrict stream, const char * restrict format, va_list arg);
int vfwprintf_s(FILE * restrict stream, const wchar_t * restrict format, va_list arg);
説明
vfprintf、vfwprintf の代わりとなるもので、セキュリティが強化されています。
v...printf_s 関数群は、...printf_s 関数群の代替エントリ ポイントとして知られています。 対応する ...printf_s 関数とちょうど同じ動作をしますが、引数リストではなく、引数リストへのポインタを受け取ります。
vfprintf_s は vfprintf、vfwprintf と同等ですが、stream、format、%s 形式指定子に対応する arg 内の項目の妥当性に関する実行時制約が付け加えられています(ここで言及したものはすべて NULL ポインタ以外でなければなりません)。
vfprintf_s は、引数の並びへのポインタを受け取り、format で指定される書式文字列に含まれている形式指定子を各引数に適用し、書式付けしたデータをストリームに出力します。 形式指定子の数は、引数リスト(arg)内の項目の数と同じでなければなりません。
戻り値
正常に終了した場合、vfprintf は出力文字数を返します。
エラーが発生した場合は、負の値を返します。
例
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
FILE *fp;
int vfpf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vfprintf_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);
}
vfpf("%d %f %s", inumber, fnumber, string);
rewind(fp);
fscanf_s(fp,"%d %f %s", &inumber, &fnumber, string);
printf_s("%d %f %s\n", inumber, fnumber, string);
fclose(fp);
return 0;
}
移植性
| POSIX | Win32 | ANSI C | ANSI C++ | |
|---|---|---|---|---|
|
vfprintf_s |
+ |
+ |
+ |
+ |
|
vfwprintf_s |
+ |
+ |
+ |