函数
<cwchar>

fwprintf

int fwprintf (FILE* stream, const wchar_t* format, ...);
将格式化数据写入流
format 指向的 C 宽字符串写入 stream。如果 format 包含格式说明符(以%开头的子序列),则 format 之后的附加参数将被格式化并插入到结果字符串中,以替换它们各自的说明符。

format 参数之后,函数期望至少有 format 所指定的那么多附加参数。

文件中宽字符的外部表示是多字节字符:这些是通过调用 wcrtomb 来转换每个宽字符(使用 stream 的内部 mbstate_t 对象)获得的。

这是 fprintf (<cstdio>) 的宽字符等价函数。

参数

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

返回值

成功时,返回写入的字符总数。

如果发生写入错误,则会设置错误指示符ferror)并返回一个负数。

如果在写入宽字符时发生多字节字符编码错误,errno 会被设置为EILSEQ并返回一个负数。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* 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-FrancoisYoko作为 3 个名字,myfile.txt将包含

Name 1: John
Name 2: Jean-Franc
Name 3: Yoko


有关格式化的更多示例,请参阅 printf

另见