Программа на С. Проблема с записью в файл многобайтного символа! компилятор GCC?

Помогите разобраться! Почему многобайтовые символы не записываются в файл, записываются только ascii-символы, до 255 а потом все с нуля?
#include <stdio.h>
#include <wchar.h>

int main (void)
{
  wchar_t num;
  FILE *file = fopen("text", "r");
  num = fgetwc(file);
  fclose(file);
  num++;
  FILE *file1 = fopen("text", "w");
  fputwc(num, file1);
  fclose(file1);
}

На виндовсе с визуал студио Все прекрасно записывалось, точно не уверен но больше одного байта значения были в файле. С компилятором GCC не могу разобраться почему только ascii-символы записываются? Проверял функцией fwide() возвращает 1 (файл открыт в многобайтовом режиме). Неужели Этот Мудрый компилятор с такими вещами не дружит?
  • Вопрос задан
  • 490 просмотров
Пригласить эксперта
Ответы на вопрос 2
В Windows wchar_t 16 бит и всегда UTF-16, в gcc под Linux - 32 и потенциально любая кодировка, все зависит от локали. Поэтому вы не можете целиком считать даже один символ. Можно использовать ключ -fshort-wchar для gcc, но в общем-то это костыли.
Ответ написан
Комментировать
@abcd0x00
#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
    FILE *fp_in, *fp_out;
    wchar_t wch;

    setlocale(LC_ALL, "ru_RU.UTF-8");

    fp_in = fopen("file.txt", "r");
    wch = getwc(fp_in);
    fclose(fp_in);

    putwc(wch, stdout);
    wch++;
    putwc(wch, stdout);
    putwc(L'\n', stdout);

    fp_out = fopen("output.txt", "w");
    putwc(wch, fp_out);
    fclose(fp_out);

    return 0;
}


Вывод
[guest@localhost wch]$ .ansi wch.c -o wch
[guest@localhost wch]$ ./wch
жз
[guest@localhost wch]$ cat file.txt 
ж[guest@localhost wch]$ cat output.txt 
з[guest@localhost wch]$
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы