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个字符会报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具