
今日在C语言学习的过程中,遇到了一个很奇怪的现象,那就是会打印出一个奇怪的符号。
#include <stdio.h>
int main()
{
char s[20];
memset(s, 'r', 8);
puts(s);
printf("%d %d ", s[0], s[8]);
return 0;
}
这个程序的运行过程是这样的:
- 定义一个字符型的数组,然后用memset()函数初始化,用字符‘r’填了8个字节长度;
- 然后用puts()函数打印在屏幕上;
- 然后分别打印了字符数组的第一个元素和第九个元素s[8]的ASCII码;
运行结果是这样的:

看见了吗?它竟然没有按照预期的来运行,它自发地打印了一个‘♀’。我不明白那是什么东西或者为什么会打印那个东西。所以我查了一下那个东西的ASCII码,用十进制表示就是12。

它是一个换页符,惊不惊喜意不意外?
我当时怀疑这个东西是一个内存垃圾,然后我重新打开一个文件重新写了一个一模一样的程序。目的是避过这个奇怪的内存单元:
#include <stdio.h>
int main()
{
char s[20];
memset(s, 'r', 8);
puts(s);
printf("%d %d ", s[0], s[8]);
return 0;
}
结果它的运行结果是这样:

它又打印了一个东西,我看不见的东西,因为第九个单元s[8]的ASCII码是13。13是下面这个东西:

回车键是不显示的,等等上一个是12,而这个是13,,会不会……
我又做了很多实验:

它们都是13。
这个真是有趣的问题,虽然现在我还不明白为什么是这样,但是总有一天我会明白的。
【完】