strcpy溢出问题

眼睛猥琐男 2010-05-14 05:09:43
char *s1="12345";
char s2[5];
strcpy(s2,s1);//应该会溢出吧,为什么程序调试时,从来不出错呢?环境VC6
...全文
287 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SH19871122 2010-05-14
  • 打赏
  • 举报
回复
还是用strncpy吧,memcpy也成
眼睛猥琐男 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pachonghanya 的回复:]
我认为其实并没有溢出,你最好了解下strcpy的实现细节,strcpy完成操作后并不在字符串后补零,需要自己补0的,这样对strcpy来说s2的内存空间刚好满足需要,只是你访问s2的时候会一直访问到0结束!
[/Quote]


微软的strcpy是这样写的,所以应该是溢出的
Char * MyStrcpy(char *dest,const char *src)
{
Char *p=dest;
While(*dest++=*src++);
Return dest;
}
某某9 2010-05-14
  • 打赏
  • 举报
回复

因为编译器不负责检查是否溢出,

但是程序运行时 还是会崩溃的!
huanmie_09 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chonet2009 的回复:]
对,我就是这个意思,难道是我运气太好。它老不出错让我很伤心。。。。^__^
[/Quote]
要防止可能的意外发生。
strcpy(str1, str2);
要求str1的空间>=str2的空间.
zyc_glboy 2010-05-14
  • 打赏
  • 举报
回复
我认为其实并没有溢出,你最好了解下strcpy的实现细节,strcpy完成操作后并不在字符串后补零,需要自己补0的,这样对strcpy来说s2的内存空间刚好满足需要,只是你访问s2的时候会一直访问到0结束!
眼睛猥琐男 2010-05-14
  • 打赏
  • 举报
回复
对,我就是这个意思,难道是我运气太好。它老不出错让我很伤心。。。。^__^
hewenkang 2010-05-14
  • 打赏
  • 举报
回复
补充:以上是对strcpy这个函数来说
pbdwadr 2010-05-14
  • 打赏
  • 举报
回复
你说的出错是指崩溃吧?
就是windows经典的“程序遇到问题需要关闭”?

那样只有你的这段代码正好覆盖了关键代码才能发生

你这个只是覆盖了无关紧要的小代码,所以表面上看不出来。。
hewenkang 2010-05-14
  • 打赏
  • 举报
回复
因为编译器不负责检查是否溢出,这是程序员的责任。
pengzhixi 2010-05-14
  • 打赏
  • 举报
回复
明显s2的空间还小了点。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧