函式
<cwchar>

vfwscanf

int vfwscanf (FILE* stream, const wchar_t* format, va_list arg);
從流中讀取格式化資料到可變引數列表
stream讀取資料,並根據C寬字串format將資料儲存到由arg標識的可變引數列表中的元素所指向的位置。

在內部,該函式從由 arg 標識的列表中檢索引數,就像對其使用了 va_arg 一樣,因此 arg 的狀態很可能會因呼叫而改變。

無論如何,arg 應該在呼叫之前的某個時刻由 va_start 初始化,並且預計在呼叫之後的某個時刻由 va_end 釋放。

檔案中的寬字元的外部表示是多位元組字元:這些字元的轉換方式如同呼叫mbrtowc(使用stream的內部mbstate_t物件)。

這是vfscanf<cstdio>)的寬字元等效函式。

引數

stream
指向標識輸入流的 FILE 物件的指標。
該流不應有任何朝向,或應是寬字元朝向的(對流的第一個 I/O 操作決定了它是位元組朝向還是寬字元朝向,請參閱 fwide)。
format
C 語言寬字串,包含一個格式字串,其規範與 scanf 中的 format 相同(更多詳情請參見 scanf)。
請注意,所有格式說明符的含義與 scanf 中的相同;因此,%lc應用於讀取單個寬字元(而不是%c),同樣%ls應用於寬字串(而不是%s).
arg
一個標識由 va_start 初始化的可變引數列表的值。
va_list 是在 <cstdarg> 中定義的特殊型別。

返回值

成功時,函式返回成功填充的引數列表項的數量。由於匹配失敗、讀取錯誤或到達檔案結尾,該計數可能與預期的項數相符,也可能更少(甚至為零)。

如果發生讀取錯誤或在讀取過程中到達檔案尾,則會設定相應的指示符(feofferror)。如果其中任何一個在成功讀取任何資料之前發生,則返回EOF

如果在解釋寬字元時發生編碼錯誤,函式會設定 errnoEILSEQ.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* vfwscanf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>

void ReadWideStuff (FILE * stream, const wchar_t * format, ...)
{
  va_list args;
  va_start (args, format);
  vfwscanf (stream, format, args);
  va_end (args);
}

int main ()
{
  FILE * pFile;
  int val;
  wchar_t str[100];

  pFile = fopen ("myfile.txt","r");

  if (pFile!=NULL) {
    ReadWideStuff ( pFile, L" %ls %d ", str, &val );
    wprintf (L"I have read %ls and %d", str, val);
    fclose (pFile);
  }

  return 0;
}

另見