免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: M.I.X
打印 上一主题 下一主题

[函数] 曾面试时被问:strcpy函数为什么要返回指针? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
1 [报告]
发表于 2007-08-06 09:19 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 09:16 发表

没有错误是错误值是0的情况,就像没有返回值是返回值是void一样。

按你所说的,str*只能返回0,
即使数组越界。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-08-06 09:25 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 09:23 发表

我可没这么说,我只不过针对他说的strcpy永远不会出错这句话说的——假设真的永远不会出错,比如在申请内存失败的情况下也不算出错。

比如数组越界这种问题,应该算在c的编程传统上,在这个问题上,我什么 ...

strcpy没有什么内存可申请的吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-08-06 10:00 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 09:45 发表

我知道那个strcpy的源代码是直接在dest的后面增加,可能很不幸,src是如此的巨大(或者本身ram太小),且根据编译器的实现,恰好不会被dest的增长所覆盖,导致内存溢出崩溃。
这是我所能猜测的strcpy可能出错 ...

抱歉,没看懂你的意思。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-08-06 10:14 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 10:09 发表

dest可扩展的空间太小,src太大,这个肯定是要算做失败的。

dest是你传入的参数,在调用的时候已经决定大小了,
可扩展是怎么回事?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2007-08-06 11:15 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 11:09 发表
可扩展的意思是:从c语言的角度来看,完全是可以这么strcpy的--不是编译错误(但是可能会抛出运行期错误).的确,看不到显式的内存申请语句,但是dest的确是需要更多的内存还容纳src--(这样c语言不认为是错误,反而认为 ...

你能不能给一个小例子出来,
光看你说,我很晕。
我还是不知道你想表达什么意思。
c标准里规定了,如果dest的空间不够容纳
src的,那么行为是未定义的。
是不是你认为标准规定的不合理,
应改成:“如果dest的空间不够容纳
src的,应该能够自动扩展空间或者报告错误?”

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-08-06 12:46 |显示全部楼层
吃完饭回来,发现有些帖子没了?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2007-08-06 12:52 |显示全部楼层
原帖由 flw 于 2007-8-6 12:51 发表

是快乐的土豆自己删除了自己的回复。

晕,那还咋讨论呀。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP