社区
C语言
帖子详情
strcpy溢出问题
眼睛猥琐男
2010-05-14 05:09:43
char *s1="12345";
char s2[5];
strcpy(s2,s1);//应该会溢出吧,为什么程序调试时,从来不出错呢?环境VC6
...全文
287
10
打赏
收藏
strcpy溢出问题
char *s1="12345"; char s2[5]; strcpy(s2,s1);//应该会溢出吧,为什么程序调试时,从来不出错呢?环境VC6
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的空间还小了点。
缓冲区
溢出
光速入门 缓冲区
溢出
基基础
strcpy
、sprintf、strcat 等函数都非常容易导致缓冲区
溢出
问题
。 查阅C 语言编程的书籍时通常会告诉你程序
溢出
后会发生不可预料的结果。在网络安 全领域,缓冲区
溢出
利用的艺术在于让这个“不可预料的结果”变为我们...
深入分析C中不安全的sprintf与
strcpy
经过跟踪调试, 发下不少 bug 源于 sprintf 和
strcpy
之类可能造缓冲区
溢出
的函数. 应该将所有的 sprintf 用 snprintf 替换.将
strcpy
用 strncpy 替换, 并且将末尾字节设置为 ”\0′ . 代码如下:strncpy(buf, str,...
防止缓冲区
溢出
——C_C++语言的安全
问题
4.3 慎重使用
strcpy
() 4.4 慎重使用strcat(),sprintf()和vsprintf() 4.5 慎重使用scanf() 4.6 streadd()和strecpy()的使用 4.7 避免内部缓冲区
溢出
4.8 其它需要注意的函数调用 5、结束语
使您的软件运行起来:防止缓冲区
溢出
(C语言)
本文内容包括:C编程中的主要陷阱避免内部缓冲区
溢出
其它...C中大多数缓冲区
溢出
问题
可以直接追溯到标准C库。最有害的罪魁祸首是不进行自变量检查的、有
问题
的字符串操作(
strcpy
、strcat、sprintf和gets)。一般来讲
详解C语言中
strcpy
()函数与strncpy()函数的使用
附加说明:如果参数 dest 所指的内存空间不够大,可能会造成缓冲
溢出
(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。 范例 #include main(){ char a[30] = string
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章