使用西里尔字母

时间:2018-11-24 22:06:12

标签: c locale readline cyrillic editline

我正在编写一个程序,在其中使用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语言环境。

0 个答案:

没有答案