簡體   English   中英

stdin是否包含回車符(\\ r)char?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM