fwprintf:只将宽字符数组参数中的第一个字符复制到输出

时间:2017-09-25 12:30:55

标签: c io string-formatting wchar

我试图写一条包含" alpha = abcd"的消息使用以下代码到文本文件:

#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);
}

然而,在编译并执行程序后,我得到了这个输出:

  

alpha = a

为什么只将const a中的第一个字符复制到输出?

2 个答案:

答案 0 :(得分:2)

您需要更改:

{% if quantity_taxation_curr is defined and currency['code'] in quantity_taxation_curr %}

为:

L"alpha = %s\n";

您尝试打印的参数(L"alpha = %S\n"; )是字符串,因此您需要 a = L"abcd" (大写)代替 %S (小写)。对%s使用不正确的格式说明符 - 类似函数是未定义的行为。

阅读documentation for printf format specifiers

答案 1 :(得分: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";