[英]Does stdin ever contain a carriage return (\r) char?
在一个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-V CTRL-M 。
但是,这不属于C语言世界中的行尾,C语言赞成使用LF
方法指示行尾。 从C11 7.21.2 Streams /2
:
文本流是由行组成的有序字符序列,每行由零个或多个字符加上一个终止换行符组成。
可能必须在输入和输出上添加,更改或删除字符,以符合用于在主机环境中表示文本的不同约定。
换句话说,尽管某些系统在底层环境中使用了不同的 行结束符 ,但许多系统在C环境中进行自动转换以确保代码按预期运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.