2

我正在编写一个程序,在该程序中我使用 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。

4

0 回答 0