C语言数组越界和溢出

一、数组越界访问

为了保证C/C++的运行效率,编译器不对数组越界进行检查。

#include<stdio.h>

int main() {
    int a[4] = {1,2,3,4};
    for(int i = -2; i <= 8; ++i) 
        printf("a[%d] = %d\n",i, a[i]);
}



运行结果:
a[-2] = 0
a[-1] = -1
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 1674503728
a[5] = 32766
a[6] = 0
a[7] = 0
a[8] = 4198816
数组访问越界,则有可能会访问到随机数据

如果越界访问的内存没有使用权限的话,那么程序就会崩溃;如果有使用权限的话,就有可能访问到随机数据。

 

二、数组溢出

当赋予数组的元素个数超过数组本身长度的话,就会溢出,会报错。

一般数组溢出会出现超出数组长度的部分没有被存入数组,但如果是以字符串形式输出字符数组的话,则由于不知道超越数组长度的后面部分会是什么,会出现什么字符,都无法识别,因此会出现乱码的情况。不过现在溢出基本上编辑器都会报错,就像下面那个一样,还没输出所谓的乱码,就已经报错了,所以这个知道一下就行

 

     

 

 

 C语言字符串结尾会有'\0',所以这个字符数组最多只能放n-1个字符,要留1个位置给'\0'。故这个字符数组放4个字符会报错。

 

posted @ 2022-09-27 18:53  算法扫地僧  阅读(1083)  评论(0编辑  收藏  举报