哪位高手给讲讲这段代码
谁给讲讲这段代码
#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]还能赋值???
求解释 谢谢!!!
------解决方案--------------------
就好比某国的火车,正常的车厢里坐满人了,但是车厢外头也挂了不少人,车还能照样开,这是很危险的事,一旦发生点事故,那就了不得了。
------解决方案--------------------
数组越界,输出的是随机值.
举个例子说:
某个宾馆一共有100间房子,你定了前5间,那么这5间你可以随便用.
但是你非要破门进第99间去看看里面有什么东西.也没有拦得住你,但是如果里面正在进行毒品交易或者让你遇到艳照门,后果.......
------解决方案--------------------
c语言并不会检查越界问题,所以vis[99]是一个有效地址(vis首地址+偏移量99),但是这样做非常危险,如果该地址被别的程序占用了的话,强制改变会使别的程序出错,甚至系统崩溃。
------解决方案--------------------
计算机的内存中会有很多数据的,比如下图演示的内存中有两个数组:char a[2] = {'h','i'}; char b[3] = {'t','e','a'};它们各有各的空间,相处愉快。

如果要写了这样一条代码:a[2]='s';内存就会变成下面这个样子:
此时数组b的内存空间就被破坏掉了,会出现未知的错误,这就叫做数组越界,编程时要注意这一点的。
#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';内存就会变成下面这个样子: