Я пишу программу, в которой я использую библиотеку 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.