问个想不通的TC个人实验
main()
{
char a[2];
char *p;
int b=0;
gets(a);
p=a;
while(*p!='\0')
{
b++;
printf("%c\n",*p);
p++;
}
printf("%d",b);
getch();
}
小弟做个小实验
上面代码实现计算字符串长度
这段代码中 我故意将数组开辟为2个单位
发现如果开辟的数组长度为n时 当我输入n+3个字符时会出现“CPU遇到无效指令”问题 大于或小于n+3个字符都不会出现这种情况 另外 当输入n+2个字符时 会要求多输入一个字符 就象代码中数组长度为2 当我输入2+3即个数时 会出现“CPU遇到无效指令”问题 当输入2+2即4个字符时 会要求多输入一个字符 这个问题可能与系统相关吗?
PS:我的编译器:WIN-TC
[432 byte] By [
msdn] at [2007-8-14 20:05:24]

# 5 Re: 问个想不通的TC个人实验
在C中你数组定义了多大,就给分配多少空间。
在语言中gets(char *a)函数不管a开始的空间多大,直到遇到'\n'时停止。
如果你读入的数据超过了a的大小,可能超过了数据段,把数据放到了代码段,
这样就可能出现无效的CPU指令,这也是一种网络攻击的方法。和缓冲区溢出攻击有点相似。
程序员遇到这种情况应该尽量避免,如果出现问题在找有时候很困难的。
# 10 Re: 问个想不通的TC个人实验
如果你读入的数据超过了a的大小,可能超过了数据段,把数据放到了代码段
就是数据在其本身申请的空间不足了之后,被存放到了内存中存放代码的地方
不过,这个问题应该和编译器有关,建议楼主试试别的编译器,看看是否也存在这样的问题!!
我也不是很确定的!我用TC,没有做这样的试验!!