我正在编写一个程序,在该程序中我使用 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;
}
我正在尝试使程序能够处理西里尔文文本。我已经将程序语言环境设置为塞尔维亚西里尔文,它似乎处理得很好。
然而,当使用“editline/readline.h”头文件中的 readline 函数来处理文本时,会发生一个奇怪的运行时错误。
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
我的问题是,这个额外的换行符是从哪里来的,我是否滥用了这个函数,如果是,我该如何解决这个问题,或者如果不是这样,我是否只需检查每一行的额外字符我得到并摆脱它。似乎应该有一种更清洁的方法来摆脱这个问题,但我不知道如何。
只是为了清楚起见,我使用的是已经设置 sr_RS.utf8 语言环境的 Linux Mint。