c - 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
,gcc
和clang
。
解决方案
事实证明,这D
是^D
当我输入 EOF(Unix 上的control
+ )时打印到控制台的一部分。D
因为\n
在语句的开头没有printf
,一位数将覆盖^
,而两位数将覆盖整个^D
,这就是给人一些奇怪行为的印象。
推荐阅读
- javascript - 如何控制 electron.js 应用程序?
- recursion - 取列表的最大值和最小值并计算 Prolog 中的差异
- javascript - 单击jquery中表列中的按钮时如何防止数据表滚动到顶部
- c - C - 串行设备未接收到数据
- javascript - 做出反应。无法在 getDerivedStateFromProps 中启动函数
- php - mysql数据库中的每个条目都添加了另一个带有时间戳的空行
- jenkins - Jenkins & Sonarqube - 非法反射
- http - 从应用程序检查 Internet 连接
- sql - SQL,比较varchars时出现大小写问题
- wordpress - 如何将 wp-admin/edit.php 类别过滤器更改为多选?