c/c++语言开发共享为什么strcpy()导致缓冲区溢出时没有分段错误?

#include  #include  #include  void main() { char *a = "aaaaaaaaaaaaaaaa"; char b[1]; strcpy(b, a); printf("%sn", b); } 

运行时,它会打印:

 aaaaaaaaaaaaaaaa 

如果我做一个超长的,例如,* a =“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,那么它将导致段错误。

为什么第一种情况没有溢出?

    当程序试图访问不属于程序虚拟地址空间的内存时,会发生分段错误; 如果您只是在原始复制目标之后覆盖一些内容,则不会发生这种情况。

    缓冲区溢出,并不意味着它总是会出现分段错误。 它是未定义的行为 – 可能存在段错误。 它取决于你的变量在内存中的“放置”。

    看似工作,或者就此而言,不会崩溃,是一种有效的未定义行为forms。 当您的程序具有UB时, 任何事情都可能发生。 这就是为什么它非常不受欢迎。

      以上就是c/c++开发分享为什么strcpy()导致缓冲区溢出时没有分段错误?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519181.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐