首页 > 其他分享 >C语言数组越界和溢出

C语言数组越界和溢出

时间:2022-09-27 19:00:25浏览次数:55  
标签:int 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个字符会报错。

 

标签:int,C语言,越界,报错,数组,溢出
From: https://www.cnblogs.com/algorithm-code/p/16735567.html

相关文章

  • C语言:蟠桃
    #include<stdio.h>main(){intdays,sum=1;scanf("%d",&days);while(--days){sum=(sum+1)*2;}printf("%d",sum);getchar......
  • c语言常见文件操作函数——文本流
    一、文件的打开关闭指向一个保存打开文件信息的结构体变量,该结构体类型为'FILE'。在'stdio.h'中声明:struct_iobuf{char*_ptr;int_cnt;char*_base;......
  • C语言:P74-11
    #include<stdio.h>#include<math.h>#defineN10//一个球从100米高度自由落下,每次落地后返回高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?main(){......
  • C语言 define 的用法
    define的骚用法可以实现模板define字符串连接以及变量名分段联结用法   #define A(x)  test_##x     A(int8)-->test_int8   test_int8(1......
  • C语言学习第8天
    咕了一天,今天继续更-----------------------------------------------------------判断素数实例   ----------------------------------------------------------......
  • css布局溢出 overflow
    overflow属性指定在元素的内容太大而无法放入指定区域时是剪裁内容还是添加滚动条。overflow属性可设置以下值:visible-默认。溢出没有被剪裁。内容在元素框外渲染(......
  • C语言中的变长数组
    问:C语言中定义数组大小的时候可以使用变量吗?还是只能使用常量或者常量表达式??1 目前经常使用的C语言有三个版本,分别是C89、C99和C11。C89(也称ANSIC)是较早的版本,也是......
  • C语言隐式类型转换
    在c语言中,不同的类型的数据相加最终会转换为同一种数据类型,转换过程由编译器完成。不同类型之间运算按照如下表的关系转换。  参考:https://www.csdn.net/tags/MtT......
  • C语言max宏的进化
    C语言max宏的进化lv1:shit#defineMAX(a,b)a>b?a:b问题所在不必多言lv2:角度:参数也可为expr解:#defineMAX(a,b)(a)>(b)?(a):(b)bug示例:#i......
  • C语言第18天,字符串处理函数
    字符串处理函数与printf不同,这些函数不在之前熟悉的头文件stdio.h中。而是在字符串专用的头文件string.h中。1.获取字符串长度strlenstrlen函数可以获取字符数组中的字......