簡體   English   中英

C、為什么printf要在一位數長后加一個“D”?

[英]C, why does printf add a "D" after a single digit long?

我正在閱讀 K&R C 書,其中一個示例程序是:

#include <stdio.h>

int main() {
    long nc;

    nc = 0;
    while (getchar() != EOF) {
        ++nc;
    }
    printf("%ld", nc);

    return 0;
}

當我運行這個程序時,它的行為大多符合我的預期。 所以對於像This is a sentence這樣的輸入,它打印19

但是,如果我輸入少於 10 個字符(包括 EOF)的任何內容,則會在輸出數字后附加一個大寫D

例如,對於輸入hello ,輸出是6D

為什么有一個D附加到一個整數值,它是什么意思?

注意:這發生在ccgccclang

事實證明, D^D一部分,當我輸入 EOF(在 Unix 上為control + D )時,它會打印到控制台。 因為printf語句的開頭沒有\\n ,一位數將覆蓋^ ,而兩位數將覆蓋整個^D ,這給人的印象是一些奇怪的行為。

你用的是什么版本的gcc? 我使用 gcc 運行了完全相同的代碼,並且運行良好。 也許這是您的終端遺留的工件,它試圖在文件末尾打印 Ctrl-D

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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