函式
<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

另見