我使用GCC和Mac OS X从vswprintf
中得到莫名其妙的失败(返回值为-1)(在Mac OS X 10.6和10.8下使用gcc 4.0和4.2.1测试)GCC在Linux下是不是受影响.Visual Studio也是不是受影响)。vswprintf在Mac OS X下某些unicode codepoints失败
为了证明我有最低限度从here适配,使得它打印出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
字符的任意字符串将触发此问题。任何人都可以阐明为什么会发生这种情况?这似乎是一个太大的问题,以前没有注意到!
请问您的源文件的编码匹配有望在字符串编码? – Dmitri 2013-03-15 18:03:31
我希望'fputws'调用在缺省''C“'语言环境中对超出范围字符失败,但'vswprintf'应该可以工作。 – 2013-03-15 23:41:48
标题中没有“GCC vswprintf”。在Mac OS X上,GCC在GNU/Linux上的表现与GCC有所不同,原因是'vswprintf'与GCC无关,它是由操作系统的C库'libc'提供的 – 2013-03-17 17:50:50