作者:庄老师,华清远见嵌入式学院讲师。
关于数组的越界问题由来已久,大部分人比较困惑的地方是在申请内存空间时。下面先来看一个例子:
在这个例子中呢,数组buf申请了10个空间,数据通过标准输入存到buf中,然后打印出buf中的内容。
编译、运行。
第一次输入,我输入9个数:
可以正确输出,没有问题。
但是,当我输入10个数时:
问题就来了,提示出现了越界问题。但是输入的数据一样会被打印出来,这是为什么呢?
实际上,buf申请了10个空间,这是buf自己的,但是只可以存入9个数据,留一个存‘\0’结束符,里面的数据是受保护的。在buf申请的空间后面也是可以存数据的,所以申请了10 个空间,输入10个及以上的数据也是可以打印出来的,但是越界的数据是不受保护的。假如此时正好有程序申请了这段内存空间,buf中越界的数据就会被覆盖,导致数据丢失。一般,为了保证数据的安全性,申请多少空间就用多少空间。
文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column746.htm