darthmaul Опубликовано 15 марта, 2018 Поделиться Опубликовано 15 марта, 2018 Вывожу ники игроков, на латинце без проблем, а если крилица то тоже выводит то на конце иероглифы почему то. Спойлер void draw::Text(int x, int y, int align, unsigned color, const char* text, ...) { wchar_t wstr[128]; char cstr[256]; va_list va_alist; va_start(va_alist, text); vsprintf(cstr, text, va_alist); va_end(va_alist); MultiByteToWideChar(CP_UTF8, 0, cstr, -1, wstr, 128); if (align) { int w, h; surface->GetTextSize(g_iFont, wstr, w, h); if (align == 1 && w > 0) w /= 2; x -= w; } surface->DrawSetTextColor(RGBA(color)); surface->DrawSetTextPos(x, y); surface->DrawSetTextFont(g_iFont); surface->DrawPrintText(wstr, strlen(cstr)); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 15 марта, 2018 Поделиться Опубликовано 15 марта, 2018 25 минут назад, darthmaul сказал: surface->DrawPrintText(wstr, strlen(cstr)); Во-первых, надо мемсетом занулить выделенные буферы (массивы) Во-вторых, если ты используешь юникод, то нужно и длину строки получать юникодовой функцией или же результат strlen(cstr) умножать на 2. Ссылка на комментарий Поделиться на другие сайты Поделиться
darthmaul Опубликовано 15 марта, 2018 Автор Поделиться Опубликовано 15 марта, 2018 1 час назад, Xipho сказал: Во-первых, надо мемсетом занулить выделенные буферы (массивы) Во-вторых, если ты используешь юникод, то нужно и длину строки получать юникодовой функцией или же результат strlen(cstr) умножать на 2. Спасибо тебе админушка! Проблема действительно была в подсчете строки, заменил на wcslen(wstr) и все работает корректно) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения