Функция editline / readline в C добавляет дополнительный ввод строки для ввода при использовании кириллицы - PullRequest
0 голосов
/ 25 ноября 2018

Я пишу программу, в которой я использую библиотеку editline C. для получения ввода от пользователя.

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

#include <editline/readline.h>
#include <editline/history.h>

int main(int argc, char **argv)
{
    setlocale(LC_ALL, "sr_RS.utf8");

    while (1)
    {
        char *input = readline("prompt> ");

        add_history(input);

        printf("%s\n", input);

        free(input);
    }

    return 0;
}

Я пытаюсь сделать программу способной обрабатывать текст на кириллице.Я уже установил язык программы на сербскую кириллицу, и он, кажется, хорошо ее обрабатывает.

Однако при использовании функции readline в заголовке "editline / readline.h" для обработки текста, странная ошибка во время выполненияпроисходит.

prompt> k
k
prompt> к
к

prompt> k
k

А именно, всякий раз, когда введенная строка содержит хотя бы один кириллический символ, функция readline добавляет дополнительный символ перевода строки в конце строки, которого обычно нет.

Я вставил грубую проверку в цикл while, чтобы проверить, что это на самом деле проблема с функцией readline.

while (1)
{
    char *input = readline("prompt> ");

    add_history(input);

    for (int i = 0; input[i] != '\0'; ++i)
    {
        printf("%d\n", (int) input[i]);
    }

    free(input);
}

, как и ожидалось, она дает следующий результат:

prompt> k
107
prompt> к
-48
-70
10

У меня вопрос: откуда взялся этот дополнительный символ перевода строки, неправильно ли я использую функцию, и если да, то как мне избавиться от этой проблемы, или, если это не так, я просто проверяю наличие этого дополнительного символа?каждую строчку я получаю и избавляюсь от нее.Кажется, должен быть более чистый способ избавиться от этой проблемы, но я не знаю как.

Просто для ясности я использую Linux Mint, на котором я уже настроиллокаль sr_RS.utf8.

...