LINUX.ORG.RU

wcrtomb & unicode


0

0

Почему не работает wcrtomb, когда пытаюсь сконвертировать им
какой-нибудь символ с индексом больше U+7e?

Вот пример, почему-то не конвертирует букву я:
#include <stdio.h>
#include <wchar.h>

int main()
{
    char buf[32];
    size_t r1, r2;
    
    buf[0] = 0;
    r1 = wcrtomb(buf, L'я', NULL);
    printf("%s %s\n", buf, ((size_t)-1) == r1 ? "EILSEQ" : "");
    
    buf[0] = 0;
    r2 = wcrtomb(buf, L'z', NULL);
    printf("%s\n", buf, ((size_t)-1) == r2 ? "EILSEQ" : "");
}

LC_CTYPE у меня "ru_RU.UTF-8"

Ответ на: комментарий от watashiwa_daredeska

> man setlocale

Спасибо, разобрался:

#include <stdio.h> #include <wchar.h> #include <locale.h>

int main() { char buf[32]; size_t r1, r2; setlocale(LC_ALL, "");

buf[0] = 0; r1 = wcrtomb(buf, L'я', NULL); printf("%s %s\n", buf, ((size_t)-1) == r1 ? "EILSEQ" : ""); buf[0] = 0; r2 = wcrtomb(buf, L'z', NULL); printf("%s\n", buf, ((size_t)-1) == r2 ? "EILSEQ" : ""); }

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.