Это происходит в OS X, хотя я подозреваю, что это применимо к любой UNIX-y ОС.У меня есть две строки, которые выглядят так:
const wchar_t *test1 = (const wchar_t *)"\x44\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";
const wchar_t *test2 = (const wchar_t *)"\x44\x00\x00\x00\x19\x20\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";
В отладчике test1 выглядит как «Ds», а test2 - как «D» (с фигурным апострофом).Затем я вызываю этот код:
wchar_t buf1[100], buf2[100];
int ret1 = swprintf(buf1, 100, L"%ls", test1);
int ret2 = swprintf(buf2, 100, L"%ls", test2);
Первый вызов swprintf работает нормально.Второй возвращает -1 (и буфер не изменяется).
Я предполагаю, что проблема как-то связана с локалями, но поиск в Google не дал мне ничего полезного.Это самый простой способ воспроизвести проблему, которую я вижу.Что меня действительно интересует, так это vswprintf (), но я предполагаю, что это тесно связано.
Почему swprintf задыхается от символа Юникод, который находится за пределами 8-битного диапазона?Есть ли способ обойти это?