C++ Reference: Standard C++ Library reference: C Library: cwchar: vfwscanf

发布于:2022-11-03 ⋅ 阅读:(576) ⋅ 点赞:(0)

C++官网参考链接:https://cplusplus.com/reference/cwchar/vfwscanf/

函数
<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
如果在解释宽字符时发生编码错误,该函数将errno设置为EILSEQ。

用例
/* 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;
}
另请参考
vfscanf    Read formatted data from stream into variable argument list (function)
vwscanf    Read formatted data into variable argument list (function)
fwscanf    Read formatted data from stream (function)
wscanf    Read formatted data from stdin (function) 


网站公告

今日签到

点亮在社区的每一天
去签到