daniilgorbenko
@daniilgorbenko
Программист, AI & BigData

Как копировать один символ строки в другую переменную?

Не могу понять, как правильно взять один символ строки и вывести его в файл. При условии, что в строке записан текст на русском языке. Мне надо получить что-то вроде этого:
char *symb = "привет";
char *symb_cp; 
// symb_cp = get_symbol(symb, 2) => symb_cp == "и";
// symb_cp = get_symbol(symb, 4) => symb_cp == "е";


Для английской строки работает такой код:
symb = "hello";
    char *symb2 = malloc(sizeof(char)*2);
    strncpy(symb2, symb, 1);
    symb2[1] = '\0';
    fputs("->", fp);
    fputs(symb2, fp);
    fputs("<-", fp);
// в файле: ->h<-

Для русской строки такая же операция не работает, так как в файл помещаются непонятные символы.
Как быть в такой ситуации с русским языком?
  • Вопрос задан
  • 363 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Для кода нет никакой разницы английский символ в строке, русский или китайский.
Но когда вы читаете текстовый файл глазами, чтобы символы правильно отображались вы должны выбрать правильную кодировку. Си никак не меняет кодировку символов, то что есть в строке то и пишется в файл.

Вообще у вас как-то усложнена запись в файл. Зачем вы копируете этот единственный символ, да еще и выделяете для этих 2ух байт динамическую память (которую надо еще и освободить после использования).
Си строка - это просто массив байт. С ним можно обращаться как с массивом (symb[i]). Для записи в файл одного символа используйте fputc(), для записи нескольких байт используйте fwrite().
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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