C、为什么printf在个位数长后添加 "D"?

标签 c printf long-integer

我正在阅读 K&R C 书,示例程序之一是这样的:

#include <stdio.h>

int main() {
    long nc;

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

    return 0;
}

当我运行这个程序时,它的行为基本上符合我的预期。因此,对于像 这是一个句子 这样的输入,它会打印 19

但是,如果我输入 10 个字符以下(包括 EOF)的内容,则输出数字后会附加一个大写的 D

例如对于输入 hello,输出为 6D

为什么整数值后面会附加一个 D 以及它的含义是什么?

注意:这种情况发生在 ccgccclang 中。

最佳答案

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

关于C、为什么printf在个位数长后添加 "D"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64067770/

相关文章:

json - 如何使用 JAXB 将长属性作为 JSON 字符串值返回

Java 左移位返回错误值

c - 通过带有数组和索引的结构来访问线程

除非我调用 printf() 函数,否则 C 代码会卡住

c - 如何将格式化数据存储到 C 中的数组?

c - 以 sprintf 科学记数法打印所有有效数字

.net - "Overflow"编译器错误 -9223372036854775808L

c - 带有目标指针和返回值的 strcpy

c - 如何从文本文件中读取整数和字符并将它们存储在单独的数组中?

c - 50%规则