首页 > 解决方案 > C、printf为什么在一位长的后面加一个“D”?

问题描述

我正在阅读 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附加到一个整数值,这是什么意思?

注意:这发生在cc,gccclang

标签: cprintflong-integer

解决方案


事实证明,这D^D当我输入 EOF(Unix 上的control+ )时打印到控制台的一部分。D因为\n在语句的开头没有printf,一位数将覆盖^,而两位数将覆盖整个^D,这就是给人一些奇怪行为的印象。


推荐阅读