免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3283 | 回复: 15
打印 上一主题 下一主题

strcpy 和 =的区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-26 23:23 |只看该作者 |倒序浏览
char *str = NULL;
        str = (char*)malloc(sizeof(char)*10);
        strcpy(str, "hello");
      str = "hello";
strcpy(str, "hello");和  str = "hello";有什么区别

论坛徽章:
0
2 [报告]
发表于 2009-05-26 23:26 |只看该作者
哦,我错了

[ 本帖最后由 prolj 于 2009-5-26 23:33 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-05-26 23:30 |只看该作者
前者是每个内存单元都赋值,而后者则是将str指向那块存放字符串的内存,基本上前面有两份字符串,而后面只有一份

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
4 [报告]
发表于 2009-05-26 23:40 |只看该作者
你的代码内存泄漏了

论坛徽章:
0
5 [报告]
发表于 2009-05-26 23:59 |只看该作者
str是局部变量,栈上分配的一个指针

str = (char*)malloc(sizeof(char)*10);
这样str就指向堆里分配的一块内存,大小为10,内容随机;
strcpy(str, "hello");
这时候这块内存就填充了"hello\0@#$%",后面内容仍然是随机的

---------------------------------------------------
str = "hello";
字符字面常量"hello"直接存储在text段中,这是一个只读的段
然后让str指针指向这个字符串


这个问题好像永无止境,其实你只要明白指针变量,还有它指向的内存数据,这样就OK了。

论坛徽章:
0
6 [报告]
发表于 2009-05-27 02:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2009-05-28 22:58 |只看该作者
形象的说
stcpy需要指针,分配了空间,也就好像有个空房子,把字符串放进来
而=不同,指针不需要分配空间,直接去指向人家装好了字符串的房子

论坛徽章:
0
8 [报告]
发表于 2009-05-28 23:38 |只看该作者
第一个是你装在自己地方,并知道位置,第二个是你知道东西放的位置

论坛徽章:
0
9 [报告]
发表于 2009-05-29 01:10 |只看该作者
用《inside the c++ object model》中的术语来说

>> str = "hello";
  这是个 bitwise copy 行为,位逐次 copy,属于浅 copy
  只是死板的直接 copy 数据(pointer -> pointer)
  或者说是复制链接(类似于 shell 中的建立 link 行为),属于伪 copy


>> strcpy(str, "hello");
  这算是 objectwise copy 行为(或 memberwise copy),属于深 copy
  copy object(object -> object)
  属于真正的 copy



用 C 角度看:

>> str = "hello";
  是往 str 里放 pointer

>> strcpy(str, "hello");
  是往 *str 里放 "hello" 这5个字符

论坛徽章:
0
10 [报告]
发表于 2009-05-29 09:49 |只看该作者

回复 #9 mik 的帖子

>> strcpy(str, "hello");
  是往 *str 指向的空间里放 "hello" 这5个字符
漏掉了俩字符
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP