fwprintf:只有宽字符数组参数中的第一个字符被复制到输出
fwprintf: only the first character from a wide char array argument gets copied to output
我正在尝试使用以下代码将包含 "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
的第一个字符被复制到输出?
您需要更改:
L"alpha = %s\n";
至:
L"alpha = %S\n";
您尝试打印的参数 (a = L"abcd"
) 是一个 wide 字符串,因此您需要 %S
(大写)而不是 %s
(小写)。对类似 printf
的函数使用不正确的格式说明符是未定义的行为。
使用 C99 兼容编译器,使用 "%ls"
。
If an l
length modifier is present, the argument shall be a pointer to the initial element of an array of wchar_t
type. C11dr §7.29.2.1 10.
// const wchar_t *msg = L"alpha = %s\n";
const wchar_t *msg = L"alpha = %ls\n";
我正在尝试使用以下代码将包含 "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
的第一个字符被复制到输出?
您需要更改:
L"alpha = %s\n";
至:
L"alpha = %S\n";
您尝试打印的参数 (a = L"abcd"
) 是一个 wide 字符串,因此您需要 %S
(大写)而不是 %s
(小写)。对类似 printf
的函数使用不正确的格式说明符是未定义的行为。
使用 C99 兼容编译器,使用 "%ls"
。
If an
l
length modifier is present, the argument shall be a pointer to the initial element of an array ofwchar_t
type. C11dr §7.29.2.1 10.
// const wchar_t *msg = L"alpha = %s\n";
const wchar_t *msg = L"alpha = %ls\n";