stdin是否包含回车符(\ 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世界中的行尾,它订阅了用于指示行尾的LF
方法。 来自C11 7.21.2 Streams /2
:
文本流是由行组成的有序字符序列,每行由零个或多个字符加上终止的换行符组成。
可能必须在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。
换句话说,尽管某些系统在底层环境中使用不同的 行结束字符 ,但是其中许多系统在C环境中进行自动转换以确保代码按预期运行。