如果你的s[3]越界,碰巧s[3]后面的地址上又存有重要数据的话,后果可想而知啦
If you shed tears when you miss the sun, you also miss the stars.
这就是越界导致程序崩溃的一个实例啦
拿上面一个例子说明一下,
#include<stdio.h>
#include <string.h>
main()
{
char s[4][4]={"aef","gasw","haha"};
puts(s[0]);puts(s[1]);puts(s[2]);
}
s[1]越界,其'\0'放在了s[2]的首地址,但在初始化s[2]时,s[1]放在s[2]首地址中的'\0'被'h'覆盖掉了,所以这时s[1]在输出时要继续寻找'\0',刚好找到s[2]的结尾,有个'\0',这时输出的s[1]就是gaswhaha了.
谢谢哈 但我还是不明白 既然它是一个4*4的数组 就应该已经给它分配了内存空间啊?你说的前面的我不说什么 但输出haha后怎么能找到
'\0'呢 系统不应该会给它再分配空间来存储'\0'吧 是不是由于在内存中空闲的空间都是用0来标识呢????
[此贴子已经被作者于2007-5-28 18:37:18编辑过]
哦 上面我出了点错 我都忘了 是一个4*4的数组 忘了还有个s[3]。
要知道'\0'是字符数组的一个结束标志,而puts函数输出时也是以'\0'作为结束标志的???
puts函数输出时也是以'\0'作为结束标志的--是由于字符串是以'\0'结束的吧 而它又是用来输出字符串的 肯定就是当遇到'\0'就结束咯
呵呵~~~~~~~