2 k346k346 K346K346 于 2018.05.16 21:56 提问

缓冲溢出,为什么不报错?

#include
#include

#include
using namespace std;

int main()
{
char a[]={'1','2','3'};
cout<<sizeof(a)<<endl;
strcpy(a,"hel1234567891113");
cout<<a<<endl;
}

上面的代码可以顺利执行,并输出hel1234567891113,为什么不报错呢?

9个回答

J4cks0n
J4cks0n   2018.05.16 22:57
已采纳

这个跟编译器优化有关系的 我在vs里工作在debug模式时是会报异常的
图片说明
但工作在release模式时就不会报异常了

caozhy
caozhy   2018.05.16 22:25

因为数组后面的内存不是很“重要”。
好比在马路上开车,有的马路旁边有绿化带,有的马路边上就是墙。如果你碰巧在有绿化带的马路上开车,开出了界,那么可能问题不是很大。但是这显然是危险的。因为未必每次都没事。

lingdulebaishi
lingdulebaishi   2018.05.17 09:36

strcpy不会检查缓冲区溢出,需要用安全函数strcpy_s,缓存溢出问题可以通过valgrind等工具检测定位出来

weixin_39327518
weixin_39327518   2018.05.17 13:21

有些程序在运行过程当中,会自动跳过一些错误的编程代码,也有可能是编程软件自身的问题。

qq_40127372
qq_40127372   2018.05.17 16:46

溢出在输出框里显示的是烫

chenpengllz
chenpengllz   2018.05.17 16:48

char a[]={'1','2','3'} 是用指针处理的,strcpy只是将dest放到src,不做长度判断

renh12
renh12   2018.05.20 17:22

溢出错误是运行时错误,编译不会报错的,只有运行的时候才会出错,可以通过仿真来诊断出问题

randtest
randtest   2018.05.17 10:11

strcpy函数不会检查长度,所以存在栈溢出风险。至于能够运行是编译优化选项有关。

K346K346
K346K346 与编译器的什么优化选项有关。使用g++编译时,没有加入任何优化选项,在str1中写大概24个字节时,会出现segmentation fault。越界多少会带来segmentation fault,这个是如何规定的?
5 个月之前 回复
oyljerry
oyljerry   2018.05.16 22:21

strcpy本身就不会做检查,所以就会有缓冲区溢出的问题,自然不会报错。你用strcpy_s API就会有运行时错误。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
缓冲溢出原理exe电子书
缓冲溢出原理缓冲溢出原理缓冲溢出原理缓冲溢出原理
缓冲溢出原理 缓冲溢出原理 缓冲溢出原理
缓冲溢出原理 缓冲溢出原理 缓冲溢出原理
缓冲溢出入门.pdf
缓冲溢出入门缓冲溢出入门缓冲溢出入门..................................................................................
C++编写的缓冲溢出程序源代码
C++编写的缓冲溢出程序源代码,C++编写的缓冲溢出程序源代码
缓冲溢出原理
缓冲溢出原理 好书
缓冲溢出原理.pdf
缓冲溢出原理.pdf
防止缓冲区溢出
C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库。最有害的罪魁祸首是不进行自变量检查的、有问题的字符串操作(strcpy、strcat、sprintf 和 gets)。一般来讲,象“避免使用 strcpy()”和“永远不使用 gets()”这样严格的规则接近于这个要求。 今天,编写的程序仍然利用这些调用,因为从来没有人教开发人员避免使用它们。某些人从各处获得某个提示,但即使是优秀的开发人
栈溢出:strcpy()造成的缓冲区溢出
代码: #include  #include  void fun(const char* input) {        char buf[8];        printf("My stack look like:\n%p\n%p\n%p\n%p\n%p\n%p\n%p\n\n");        strcpy(buf,input);        printf("%s\n",b
深入理解黑客攻击-缓冲区溢出攻击
缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行动 如果有人利用栈中分配的缓冲区进行
缓冲溢出原理.rar
缓冲溢出原理.rar: 在学习C++中关于内在分配问题的时候需要了解的一点,关于缓冲溢出的问题。