我正在编写一个程序,在其中使用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
我的问题是,这个多余的换行字符是从哪里来的,我是否在滥用该功能,如果是,我如何摆脱这个问题,或者如果不是这种情况,我只是检查一下那个多余的字符性格每一行,我得到摆脱它。似乎应该有一种更清洁的方法来解决此问题,但我不知道如何。
为了清楚起见,我使用的是Linux Mint,已经在该Linux Mint上设置了sr_RS.utf8语言环境。