繁体   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