Широкий символ GNU lib c printf - PullRequest
       21

Широкий символ GNU lib c printf

1 голос
/ 25 апреля 2020

Я читаю файл, который содержит как многобайтовые символы, так и однобайтовые символы, такие как символы ASCII. Я не понимаю, почему этот код не распечатывает точное содержание файла. Вместо символов rubbi sh печатаются символы.

Следующий код должен просто считывать из источника один символ за раз и распечатывать файл.

char input[] = ... <- File contents is stored there
   char * current;
   int length = strlen (input);
   current = input;
   mbstate_t state;
   memset (&state, '\0', sizeof (state));
   while (current < &input[ strlen(input) - 1])
   {
     wchar_t character;
     size_t nbytes = mbrtowc (&character, current, length, &state);
     if (nbytes == (size_t) -2 || nbytes == (size_t) -1)
     {
        fprintf (stderr, "mbrtowc returned error %ld\n", nbytes);
        return -1;
     }
     fprintf (stdout, "%ls", &character);
     current += nbytes;
     length -= nbytes;
   }

Я не Я понимаю, что я ошибаюсь, но я уверен, что что-то не так, поскольку вывод полностью искажен, например:

I_–_FINAN

Результаты в:


 _

–
        _
         F
          I
           N
            A

Круто!

...