使用_snwprintf时意外获取中文字符

时间:2016-09-28 00:15:24

标签: c windows visual-studio

使用_snwprintf时,我会收到中文字符而不是英文。

wchar_t outfile[1024];
char const*outf = "test";
_snwprintf(outfile, 1024, L"%s.zip", outf);
_wfopen(outfile, L"wb");

文件名应该是" test"但是在输出文件中它是中文的。

当我尝试这样没有问题时,输出文件包含预期的英语:

_snwprintf(outfile, 1024, L"justtest.zip");
_wfopen(outfile, L"wb");

如何更正第一个代码块,以便在输出文件中正确显示文件名?

1 个答案:

答案 0 :(得分:1)

wchar_t outfile[1024];
char const*outf = "test";
_snwprintf(outfile, 1024, L"%s.zip", outf);
_wfopen(outfile, L"wb");

outf是ANSI(char),但outfile是UTF-16(wchar_t),_snwprintf期望wchar_t。 Visual Studio 2015发出以下警告:

warning C4477: '_snwprintf' : format string '%s' requires an argument
of type 'wchar_t *', but variadic argument 1 has type 'const char *'

您需要更改代码才能使用wchar_t

wchar_t outfile[1024];
const wchar_t* outf = L"test";
_snwprintf(outfile, 1024, L"%s.zip", outf);
wprintf(L"%s\n", outfile);