char aa[1];
char * bb = "ssss";
strcpy(aa,bb);
AfxMessageBox(aa);
应该溢出了,aa应该等于"0/"结果是aa为"ssss"
大家谈谈
应该溢出才对啊~~~~
几个字节的溢出不一定马上产生异常,因为被非法改写的内存不一定就是非法内存(未经分配的内存)。比如说如果是在堆栈里4、5个字节的堆栈改写一般不会导致堆栈越界,只是可能会影响紧接着的几个局部变量的值,从而导致其它问题。
其实,程序本身已经产生了溢出,仅仅是因为该数组边上恰好没有其它数据,所以才不容易发觉出来。
假设程序是这样:
char D[3],A[1],C[3],*B = "ssss";
cout<<A<<endl;
cout<<C<<endl;
cout<<D<<endl;
cout << int(A) <<":"<<int(C)<<":"<<int(D)<<":"<<int(B)<<endl;
strcpy(A,B);
cout <<A<<endl;
cout <<B<<endl;
cout <<C<<endl;
cout<<D<<endl;
那么,是否溢出就变得很明显了。
什么叫溢出??我不懂,能不能解释一下??
我只知道这样内存中在aa后的空间的内容被改写了,这样很危险;