[英]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.