2017-09-25 202 views
1

我試圖寫使用以下代碼包含「阿爾法= ABCD」到一個文本文件的消息:fwprintf:只從一個寬字符數組參數的第一個字符被複制到輸出

#include <stdio.h> 
#include <wchar.h> 

int 
main() 
{ 
     const wchar_t *a = L"abcd", *msg = L"alpha = %s\n"; 
     FILE   *f = fopen("./deleteme", "a"); 

     fwprintf(f, msg, a); 
     fclose(f); 
} 

然而,編譯和執行程序後,我得到這樣的輸出,而不是:

的α=一個

爲什麼只有從常量的第一個字符3210被複制到輸出?

回答

2

你需要改變:

L"alpha = %s\n"; 

到:

L"alpha = %S\n"; 

您要打印的參數(a = L"abcd")是字符串,因此你需要%S(大寫)而不是%s(小寫)。對類似printf的函數使用不正確的格式說明符是未定義的行爲。

閱讀documentation for printf format specifiers

+0

啊,我不知道這個信息 - 謝謝! – Kais

1

對於符合C99的編譯器,請使用"%ls"

如果l長度改性劑的存在,該參數將是指向wchar_t類型的數組的初始元素。 C11dr§7.29.2.110.

// const wchar_t *msg = L"alpha = %s\n"; 
const wchar_t *msg = L"alpha = %ls\n"; 
+0

有趣的..謝謝你的信息。 – Kais

+0

@Kais這是否適合您的編譯器?如果不是,你使用的是什麼編譯器/版本? – chux

+0

是的。順便說一句,我在linux下使用gcc 6.3.0。 – Kais

相關問題