为什么 printf 与 long 类型和换行一起使用时会产生垃圾值?
Why does printf generate a garbage value when used in conjunction with a long type and a new line?
我目前正在阅读 C Programming Language(第 2 版)一书,遇到了一个产生奇怪结果的示例。我有一个简单的 C 程序,它打印用户通过控制台输入的字符数。
#include <stdio.h>
main()
{
int c;
long nc;
nc = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') {
continue;
}
++nc;
}
printf("%ld\n", nc);
}
奇怪的是,当我 运行 程序时,提供“abc”作为输入,然后通过 ctrl+d
发送 EOF 字符
我得到以下结果:3D
结果中的数字3是有道理的,因为我输入了3个字符,但我很好奇字母D代表什么。是否会因为字符串缺少空终止符而被视为垃圾值 [=12=]
?
根据@Ry- 和@user3386109 的建议,^D
被实际结果覆盖,我们最终得到输出 3D。
3 覆盖了 ^ 而 D 没有被覆盖,所以它仍然存在,我们得到结果 3D
I get the following result: 3D
事情是这样的:
- 您输入了
abc
,然后按下了 return 键。
- 您按下 Ctrl-D,终端将其回显为
^D
。
- 您的程序打印了
3
(输入的非换行字符数),覆盖了 ^
字符。
- 你的程序打印了一个新行
\n
,所以你得到了输出 3D
.
您正在使用的终端正在以 ^
表示法回显控制字符。
不使用任何字符串数组来累积字符,所以不可能缺少[=17=]
字符串终止符。
我目前正在阅读 C Programming Language(第 2 版)一书,遇到了一个产生奇怪结果的示例。我有一个简单的 C 程序,它打印用户通过控制台输入的字符数。
#include <stdio.h>
main()
{
int c;
long nc;
nc = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') {
continue;
}
++nc;
}
printf("%ld\n", nc);
}
奇怪的是,当我 运行 程序时,提供“abc”作为输入,然后通过 ctrl+d
发送 EOF 字符我得到以下结果:3D
结果中的数字3是有道理的,因为我输入了3个字符,但我很好奇字母D代表什么。是否会因为字符串缺少空终止符而被视为垃圾值 [=12=]
?
根据@Ry- 和@user3386109 的建议,^D
被实际结果覆盖,我们最终得到输出 3D。
3 覆盖了 ^ 而 D 没有被覆盖,所以它仍然存在,我们得到结果 3D
I get the following result: 3D
事情是这样的:
- 您输入了
abc
,然后按下了 return 键。 - 您按下 Ctrl-D,终端将其回显为
^D
。 - 您的程序打印了
3
(输入的非换行字符数),覆盖了^
字符。 - 你的程序打印了一个新行
\n
,所以你得到了输出3D
.
您正在使用的终端正在以 ^
表示法回显控制字符。
不使用任何字符串数组来累积字符,所以不可能缺少[=17=]
字符串终止符。