请教:strdup与strcpy具体的区别

yanpeace 2008-08-20 10:41:47
strdup与strcpy具体的区别:

我分别在XP的环境和linux环境下编译运行C代码,我发现一个不解的现象:

现象描述:
两个字符串 char* from, char* to;要把from的内容复制给to。
我在XP下,用strcpy(to, from)出现memory问题,于是换成
to = strdup(from),就运行正常。
而在linux下,用to = strdup(from)出现memory问题(报错信息:* glibc detected *** free(): invalid next size (fast): 0x09a8d868 ***),于是换成strcpy(to, from),就运行正常。

请大家指教:
1,如何解释我遇到的这种现象;
2,strdup与strcpy具体的区别,以及在不同操作系统下的使用。
谢谢!
...全文
22102 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangfan0127 2012-10-05
  • 打赏
  • 举报
回复
Thanks
zhangsha3121 2012-09-21
  • 打赏
  • 举报
回复
好贴,学习了。~~~
binger19900504 2011-10-22
  • 打赏
  • 举报
回复
4楼正解啊。。
gaochao2301 2011-09-15
  • 打赏
  • 举报
回复
好清晰,学习了
Malloc_yb 2011-09-01
  • 打赏
  • 举报
回复
是不是 from 和 to 都是定义的常量字符串啊!没有空间啊
caizir913 2011-08-15
  • 打赏
  • 举报
回复
原来是这样,学习了!
wangrice2004 2011-07-29
  • 打赏
  • 举报
回复
学了了~
elly_dan 2011-04-29
  • 打赏
  • 举报
回复
学习了 很有用
赤道海的蓝 2011-03-29
  • 打赏
  • 举报
回复
strdup是已经被废弃的函数了,因为用了之后必须要free,而很多程序员会遗忘或者忽视这个问题,造成严重的内存泄漏!new/delete或者malloc/free要成对使用,即使这样明确的规则,还会有人忘记释放内存空间。所以当strdup和free捆绑使用的时候,有无数的人忘记了free。
cnchs 2011-02-21
  • 打赏
  • 举报
回复
非常感谢。
嘻嘻塔 2011-02-18
  • 打赏
  • 举报
回复
XUEXIE YI XIA
  • 打赏
  • 举报
回复
原来如此
ma328762444 2010-03-30
  • 打赏
  • 举报
回复
学习了
kuangxiangjie 2009-05-16
  • 打赏
  • 举报
回复
谢谢!
Dansley 2009-05-13
  • 打赏
  • 举报
回复
char *strdup(const char *s)
{
char *t = NULL;
if(s && (t = (char*)malloc((strlen(s)+1)))
strcpy(t, s);
return t;
}
guohuo 2009-02-02
  • 打赏
  • 举报
回复
留标签
ysysbaobei 2008-08-29
  • 打赏
  • 举报
回复
mark 学习一下
mxliang 2008-08-29
  • 打赏
  • 举报
回复
学习了。。
wind_breez 2008-08-29
  • 打赏
  • 举报
回复
strdup 内部在堆上创建了一个备份,所以即使没看到malloc也应该在使用完毕后得自己手动释放(free);
strcpy 使用的时候,必须已经拥有了足够的空间才行。
abomber2 2008-08-28
  • 打赏
  • 举报
回复
strdup用完要free否则 内存泄露

strcpy拷贝到你分配的内存
加载更多回复(10)

70,023

社区成员

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

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