哪位高手给讲讲这段代码

谁给讲讲这段代码

#include<stdio.h>
int main(void){
   int i;
   char *str="abc";
   char visit[5] = {0};
   visit[str[2]] = 3;
   printf("%c\n",str[2]);  //输出字母C
   printf("%d\n",str[2]);  //输出数字99
   printf("%o",visit[str[2]]);//输出数字3
}
为什么只有5个字符数组visit,visit[99]还能赋值???
求解释  谢谢!!!

c

------解决方案--------------------
就好比某国的火车,正常的车厢里坐满人了,但是车厢外头也挂了不少人,车还能照样开,这是很危险的事,一旦发生点事故,那就了不得了。
------解决方案--------------------
数组越界,输出的是随机值.

举个例子说:
某个宾馆一共有100间房子,你定了前5间,那么这5间你可以随便用.
但是你非要破门进第99间去看看里面有什么东西.也没有拦得住你,但是如果里面正在进行毒品交易或者让你遇到艳照门,后果.......
------解决方案--------------------
c语言并不会检查越界问题,所以vis[99]是一个有效地址(vis首地址+偏移量99),但是这样做非常危险,如果该地址被别的程序占用了的话,强制改变会使别的程序出错,甚至系统崩溃。
------解决方案--------------------
计算机的内存中会有很多数据的,比如下图演示的内存中有两个数组:char a[2] = {'h','i'}; char b[3] = {'t','e','a'};它们各有各的空间,相处愉快。
哪位高手给讲讲这段代码
如果要写了这样一条代码:a[2]='s';内存就会变成下面这个样子:哪位高手给讲讲这段代码此时数组b的内存空间就被破坏掉了,会出现未知的错误,这就叫做数组越界,编程时要注意这一点的。