vprintf() - データのフォーマット設定と stdout への出力
標準
| 標準/拡張機能 | C/C++ | 依存項目 |
|---|---|---|
ISO C |
両方 |
形式
#include <stdarg.h>
#include <stdio.h>
int vprintf(const char * __restrict__format, va_list arg_ptr);
#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>
int vprintf_unlocked(const char * __restrict__format, va_list arg_ptr);
機能説明
vprintf() 関数は、printf() に似ていますが、arg_ptr は番号がプログラムの呼び出しによって 異なることがある引数のリストを指しているという点は除きます。これらの引数は、各呼び出しごとに va_start() で初期化する必要があります。反対に、printf() は引数のリストをもてますが、そのリストの引数の 数はプログラムをコンパイルしたときに決定されます。書式制御 ストリングの仕様については、fprintf()、printf()、sprintf() - データのフォーマット設定と書き込みを参照してください。
vprintf() は、type=record または type=blocked を使用してオープンしたファイルで サポートされません。
vprintf() には、書き込みのすぐ後で読み取り、または読み取りのすぐ後で書き込みを行うための書き込み操作と 同じ制約事項があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。
vprintf_unlocked() は、スレッド・セーフでないことを除いて、機能的に vprintf() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。
戻り値
正常に実行された場合、vprintf() は stdout に書き込まれた文字数を戻します。
例
/* CELEBV04
This example prints out a variable number of strings to stdout,
using &vprintf..
*/
#include <stdarg.h>
#include <stdio.h>
void vout(char *fmt, ...);
char fmt1 [] = "%s %s %s %s %s ¥n";
int main(void)
{
FILE *stream;
stream = fopen("myfile.dat", "w");
vout(fmt1, "Mon", "Tues", "Wed", "Thurs", "Fri");
}
void vout(char *fmt, ...)
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
vprintf(fmt, arg_ptr);
va_end(arg_ptr);
}
Mon Tues Wed Thurs Fri