vfscanf()、vscanf()、vsscanf() - STDARG 引数リストのフォーマット入力

標準

標準/拡張機能 C/C++ 依存項目

C99
Single UNIX Specification、バージョン 3
Language Environment
C++ TR1 C99

両方 z/OS® V1R7

形式

#define _ISOC99_SOURCE
#include <stdarg.h>
#include <stdio.h>

int vfscanf(FILE *__restrict__ stream, 
            const char *__restrict__ format, va_list arg);

int vscanf(const char *__restrict__ format, va_list arg);

int vsscanf(const char *__restrict__ s, 
            const char *__restrict__ format, va_list arg);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>

int vfscanf_unlocked(FILE *__restrict__ stream, 
            const char *__restrict__ format, va_list arg);

int vscanf_unlocked(const char *__restrict__ format, va_list arg);

機能説明

vfscanf()、vscanf()、および vsscanf() の各関数は、それぞれ fscanf()、scanf()、および sscanf() の各関数と同等ですが、可変個の引数を指定して呼び出される代わりに、stdarg.h に定義された引数リストを指定して呼び出されることが異なります。

引数リストは、それぞれの呼び出しの前に va_start マクロを使用して初期化する必要があります。これらの関数は va_end マクロを呼び出さず、代わりに va_arg マクロを呼び出すので、戻った後の arg の値は未指定になります。

vfscanf() および vscanf() は、レコード・タイプを指定して開かれたファイルに対してはサポートされません。またこれらの関数には、読み取りの直後の書き込み、または書き込みの直後の読み取りと同じ制約事項があります。これは、EOF に達するまで、書き込みと後続の読み取りはフラッシュまたは位置変更を間に挟んで行う必要があり、また読み取りと後続の書き込みもフラッシュまたは位置変更を間に挟んで行う必要があるからです。

注: C 言語の一部の UNIX に基づくインプリメンテーションとは異なり、vscanf() ファミリーの z/OS XL C/C++ インプリメンテーション は変数引数リストを指すポインターを増分します。ポインターを増分するかどうかを制御するには、それぞれの関数呼び出しの後に va_end マクロを呼び出します。

vfscanf_unlocked() および vscanf_unlocked() は、スレッド・セーフでないことを除いて、 機能的に vfscanf() および vscanf() と等価 です。これらの関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、これらの関数を呼び出す場合だけです。

戻り値

fscanf() を参照してください。

関連情報