您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 关于缓冲区溢出问题的例子,请分析结果

关于缓冲区溢出问题的例子,请分析结果

来源:网络整理     时间:2016/8/9 13:22:10     关键词:

关于网友提出的“ 关于缓冲区溢出问题的例子,请分析结果”问题疑问,本网通过在网上对“ 关于缓冲区溢出问题的例子,请分析结果”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于缓冲区溢出问题的例子,请分析结果
描述:

#include 
int main(){
  char a[4];
  do{
  gets(a);
  puts(a);
  }
  while (a!="#");
  return 0 ;
}
当我输入的a超过3个字母时,输出的仍是我输入的.为什么不是截取 输出


解决方案1:

strcat 也有同样的问题啊,所以小心使用:)
FW:
while (a!="#");
不可以这样写地~~
修改为:
while( strcmp(a,"#") )

解决方案2:

你把循环删掉看看,就知道是什麽问题了

解决方案3:

C/C++不进行数组越界检查
从理论上说, 只要得到一个地址,你就可以通过这个地址进行加减运算访问到内存中的任何一个地方
至于改写那些地方会出什么后果,那是不可预测的
有些地址空间,操作系统做了保护,若要进行操作,则会被操作系统中止
有些地址空间,没有保护,进行操作也不会有什么提示,但若这些地址存放有其他重要数据,那么与这个数据相关的程序就可能崩溃~

解决方案4:

不过当输入超过一定的字符的时候程序退出了.(没有报错)
偶看了对应的汇编
4:      char a[4];
5:      do{
6:      cin>>a;
00401028   lea         eax,[ebp-4]
0040102B   push        eax
0040102C   mov         ecx,offset cin (0042aa60)
00401031   call        istream::operator>> (004023e0)
7:      cout<<>
00401036   lea         ecx,[ebp-4]
00401039   push        ecx
0040103A   mov         ecx,offset cout (0042aa20)
0040103F   call        ostream::operator<< (00401290)
8:      }
看不出什么名堂.
不知谁能解释一下,偶也谢谢了:-)

解决方案5:

gets不检查边界,是不进行截断的。想截断应该使用fgets(a, MAX, stdin);


以上介绍了“ 关于缓冲区溢出问题的例子,请分析结果”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3156935.html

相关图片

相关文章