我收到莫名其妙的失败(返回值-1)vswprintf
使用GCC和Mac OS X(在Mac OS X 10.6和10.8下使用gcc 4.0和4.2.1进行测试。Linux下的GCC是not做作的。 Visual Studio 也是not做作的)。
为了演示这个问题,我对示例进行了最低限度的改编here http://www.cplusplus.com/reference/cwchar/vswprintf/这样它就打印出来了vswprintf
的返回值:
/* vswprintf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
void PrintWide ( const wchar_t * format, ... )
{
wchar_t buffer[256];
va_list args;
va_start ( args, format );
int res = vswprintf ( buffer, 256, format, args );
wprintf ( L"result=%d\n", res );
fputws ( buffer, stdout );
va_end ( args );
}
int main ()
{
wchar_t str[] = L"test string has %d wide characters.\n";
PrintWide ( str, wcslen(str) );
return 0;
}
从我的测试看来,取决于str
, vswprintf
有时会失败。例子:
wchar_t str[] = L"test string has %d wide characters.\n"; // works
wchar_t str[] = L"ßß® test string has %d wide characters.\n"; // works
wchar_t str[] = L"日本語 test string has %d wide characters.\n"; // FAILS
wchar_t str[] = L"Π test string has %d wide characters.\n"; // FAILS
wchar_t str[] = L"\u03A0 test string has %d wide characters.\n"; // FAILS
似乎任何包含具有上述 Unicode 代码点的字符的字符串0xff
会触发这个问题。谁能解释为什么会发生这种情况?这似乎是一个太大的问题,以前没有注意到!