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

发布于:2022-11-02 ⋅ 阅读:(689) ⋅ 点赞:(0)

C++官网参考答案:https://cplusplus.com/reference/cwchar/fwprintf/

函数
<cwchar>
fwprintf
int fwprintf (FILE* stream, const wchar_t* format, ...);
将格式化的数据写入流
将按format指向的C宽字符串写入stream。如果format包含格式说明符(以%开头的子序列),则format后面的附加实参将被格式化并插入结果字符串中,取代它们各自的说明符。
在format形参之后,函数期望至少有与format指定的相同数量的附加实参。
文件中宽字符的外部表示形式是多字节字符:正如调用wcrtomb来转换每个宽字符(使用stream的内部mbstate_t对象),就可以获得这些多字节字符。
这是fprintf<cstdio>)的宽字符等效函数。

形参 
stream 
指向标识输出流的FILE对象的指针。
流还没有方向,或者是宽字符方向的(流上的第一个I/O操作决定它是面向字节的还是面向宽字符的,参见fwide)。
format 
C宽字符串,包含一个格式字符串,该格式字符串遵循与printf中的format相同的规范,但使用宽字符(详细信息请参阅printf)。
注意,所有格式说明符的含义都与printf中的含义相同;因此,%lc应使用用于写宽字符(而不是%c), %ls应使用用于写宽字符串(而不是%s)。
...(附加实参) 
根据format字符串的不同,函数可能需要一系列附加实参,每个实参包含一个值,用于替换format字符串中的格式说明符(对于n指向存储位置的指针)。
这些实参的数量至少应该与格式说明符中指定的值的数量相同。函数将忽略额外的实参。

返回值
如果成功,则返回写入的字符总数。
如果发生写错误,则设置错误指示符(ferror)并返回负数。
如果在写入宽字符时发生多字节字符编码错误,则errno设置为EILSEQ并返回负数。

用例
/* fwprintf example */
#include <stdio.h>
#include <wchar.h>

int main ()
{
   FILE * pFile;
   int n;
   wchar_t name [100];

   pFile = fopen ("myfile.txt","w");
   for (n=0 ; n<3 ; n++)
   {
     fwprintf (stdout, L"please, enter a name: ");
     fgetws (name, 100, stdin);
     fwprintf (pFile, L"Name %d: %s",n,name);
   }
   fclose (pFile);

   return 0;
}
这个示例提示用户输入一个名称3次,然后将它们写入myfile.txt,每一行都具有固定的长度(总共19个字符+换行符)。
使用了两个格式标签: 
%d:带符号的十进制整数
%-10.10s:左对齐(-),最少十个字符(10),最多十个字符(.10),字符串(s)。
假设我们输入了John,Jean-Francois和Yoko作为三个名字,myfile.txt将包含:

有关格式化的更多示例,请参阅printf
另请参考
fprintf    Write formatted data to stream (function)
wprintf    Print formatted data to stdout (function)
fwscanf    Read formatted data from stream (function)
fwrite    Write block of data to stream (function)
fputws    Write wide string to stream (function) 


网站公告

今日签到

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