c-stdin是否包含回车(r)字符



在一个SO答案中,我写了以下代码:

char fail_on_eof (int c)
{
    if (c == EOF)
        exit (EXIT_FAILURE);
    return (char) c;
}
void skip_to_next_line (void)
{
    char c;
    do
    {
        c = fail_on_eof (getchar ());
    } while (c != 'n');
}

我想知道是否有任何终端可以返回'r'(只要在线路末端还有一个'n',上面的代码就涵盖了这一点)。

stdin是否包含'r'(在任何平台上)?关于输入重定向,stdin总是在文本模式下工作吗?

当然,这很容易。你可以从包含该字符的文件中读取,也可以做一些类似的事情(在Linux和类似的操作系统下):

printf "r" | yourProgram

或者甚至从允许转义的终端程序中,例如CTRL-VCTRL-M

然而,在C世界中,这并不被认为是行的末尾,它订阅了用于指示行的末尾的LF方法。来自C11 7.21.2 Streams /2:

文本流是由字符组成的有序序列,每行由零个或多个字符加上终止换行字符组成。

在输入和输出时可能必须添加、更改或删除字符,以符合在宿主环境中表示文本的不同约定。

换句话说,尽管一些系统在底层环境中使用不同的行结束字符,但它们中的许多系统在C环境中进行自动翻译,以确保代码按预期运行。

最新更新