![9aa4036af284ec85952fe5eb0516c688.png](https://i-blog.csdnimg.cn/blog_migrate/0796c827f43cc2fab613103ca68af7c9.jpeg)
今日在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码;
运行结果是这样的:
![6d536470a6497edb747297f0d604c5ca.png](https://i-blog.csdnimg.cn/blog_migrate/77e7b6b3317d9d907512366754ad0544.png)
看见了吗?它竟然没有按照预期的来运行,它自发地打印了一个‘♀’。我不明白那是什么东西或者为什么会打印那个东西。所以我查了一下那个东西的ASCII码,用十进制表示就是12。
![3262bc5aff9713d16027b521f1e6c752.png](https://i-blog.csdnimg.cn/blog_migrate/0e324d5bb14ba674a22a63018d8dc99f.png)
它是一个换页符,惊不惊喜意不意外?
我当时怀疑这个东西是一个内存垃圾,然后我重新打开一个文件重新写了一个一模一样的程序。目的是避过这个奇怪的内存单元:
#include <stdio.h>
int main()
{
char s[20];
memset(s, 'r', 8);
puts(s);
printf("%d %d ", s[0], s[8]);
return 0;
}
结果它的运行结果是这样:
![5cd0e0c73c187c03422610717e785259.png](https://i-blog.csdnimg.cn/blog_migrate/3aed969f0e6bab3787479a5c627ce667.png)
它又打印了一个东西,我看不见的东西,因为第九个单元s[8]的ASCII码是13。13是下面这个东西:
![d8e87ab0307c0a6107e67c8f82f7913c.png](https://i-blog.csdnimg.cn/blog_migrate/3b6af7093e924b3f70675273bc95d66b.png)
回车键是不显示的,等等上一个是12,而这个是13,,会不会……
我又做了很多实验:
![b8df3b164c5ee65d4834a366652b95a2.png](https://i-blog.csdnimg.cn/blog_migrate/6be2c86d3ee04bca112b50d0ed148cb3.png)
它们都是13。
这个真是有趣的问题,虽然现在我还不明白为什么是这样,但是总有一天我会明白的。
【完】