vswscanf() — フォーマット済みワイド文字データの読み取り

フォーマット

#include <stdarg.h>
#include <wchar.h>

int vswscanf(const wchar_t *buffer, const wchar_t *format, va_list arg_ptr);

言語レベル

ANSI

スレッド・セーフ

はい

ロケール依存

この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_NUMERIC カテゴリーの影響を受ける可能性があります。また、LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) がコンパイル・コマンドに対して指定されている場合は、現行ロケールの LC_UNI_CTYPE カテゴリーおよび LC_UNI_NUMERIC カテゴリーにも影響を受ける可能性があります。 この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。詳細については、CCSID およびロケールの理解を参照してください。

ワイド文字関数

詳細については、ワイド文字を参照してください。

説明

vswscanf() 関数は、バッファーから引数の引数番号で指定されたロケーションへ ワイド・データを読み取ります。vswscanf() 関数は、swscanf() 関数と同様に機能しますが、arg_ptr はプログラムの呼び出しによって個数が異なることがある引数のリストを指しているという点が異なります。これらの引数は、 各呼び出しごとに va_start で初期化する必要があります。 反対に、 swscanf() 関数は引数のリストを持てますが、 そのリストの引数の数はプログラムをコンパイルしたときに決定されます。

各引数は、format-string の型指定子に対応する型を持つ変数へのポインター でなければなりません。format には、 swscanf() 関数の書式ストリングと同じ書式および関数があります。

戻り値

vswscanf() 関数は、正常に変換され、割り当てられたフィールドの数を 戻します。戻り値には、読み取りは行われたが、割り当てられなかったフィールドは含まれません。変換が行われていない場合に、ファイルの終わりを読み取ろうとすると、戻り値は EOF になります。戻り値 0 は、フィールドが割り当てられなかったことを 意味します。

この例では vswscanf() 関数を使用して、 ストリング tokenstring からさまざまなデータを読み取り、 そのデータを表示します。
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
int vread(const wchar_t *buffer, wchar_t *fmt, ...)
{
   int rc;
   va_list arg_ptr;
   va_start(arg_ptr, fmt);
   rc = vswscanf(buffer, fmt, arg_ptr);
   va_end(arg_ptr);
   return(rc);
}
int main(void)
{
   wchar_t *tokenstring = L"15 12 14";
   char s[81];
   char c;
   int i;
   float fp;

   /* Input various data */

   vread(tokenstring, L"%s %c%d%f", s, &c, &i, &fp);

   /* Display the data */
   printf("\nstring = %s\n",s);
   printf("character = %c\n",c);
   printf("integer = %d\n",i);
   printf("floating-point number = %f\n",fp);

}
/***************** Output should be similar to: *****************
string = 15
character = 1
integer = 2
floating-point number = 14.000000

*******************************************************************/