免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2007-08-05 14:44 |显示全部楼层
原帖由 M.I.X 于 2007-8-5 13:48 发表
是啊,返回指针可以嵌套使用
只是觉得这个问题
有点......
所以就这么答了.
汗一下自己

很多函数都是这样设计的,理由也就是这个理由。

论坛徽章:
0
2 [报告]
发表于 2007-08-05 20:35 |显示全部楼层
原帖由 思一克 于 2007-8-5 18:30 发表
FUNCTION的设计一般都是取输入参数,计算后返回结果.
有时候,结果也在参数中(也是输入),虽然可以不返回.

然而不返回有些浪费了FUNCTION的能力,还引起使用他们的函数效率低下.
比如

char buf[128];
char ...

这个感觉还是蛮对的

论坛徽章:
0
3 [报告]
发表于 2007-08-06 09:07 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 08:37 发表
在很大一部分函数返回0表示正常,负数表示异常情况下,strxxx的函数返回了dest反映的不过是原来的接口的设计人员考虑的不充分。

0表示正常,负数表示异常,这个只是在*nix系统调用中的返回值状况,而现在讨论的str×××函数都是标准库中的,标准库中的函数数绝大多数都不是返回0或负值的。

论坛徽章:
0
4 [报告]
发表于 2007-08-06 09:12 |显示全部楼层
原帖由 smltiger 于 2007-8-6 09:11 发表
为什么返回指针?
    答案:
            因为返回指针可以链式调用,使代码更美观。这个并不是随便设计的,C的库函数设计的每一步都有其意义。
    例子:
            strcpy(a,strcpy(b,c));你想想,如 ...


没看前面的讨论

论坛徽章:
0
5 [报告]
发表于 2007-08-06 09:15 |显示全部楼层
原帖由 M.I.X 于 2007-8-6 09:11 发表
2、strcpy本身就是不安全的,这类函数设计时本身就是假设调用者能确保其安全性,也许是考虑一些效率等其他因素。但如果返回0和-1或其它表示成功失败,是不是比返回dest好呢?因为在调用strcpy或strncpy是不知道成功与否的。讲究效率,也许只是个哲学问题。

strcpy的目的数组并不知道数组的长度,这个是没法返回是否成功的。

论坛徽章:
0
6 [报告]
发表于 2007-08-06 09:20 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 09:16 发表

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

光就复制这个动作而言,是不会产生错误的,而strcpy又不会知道目的数组的大小,所以,即使越界了,strcpy也不会察觉,再说了,越界了进程就被内核直接kill掉了,而strcpy返回个0有什么意思?还不如直接用void,还少了条指令

论坛徽章:
0
7 [报告]
发表于 2007-08-06 09:27 |显示全部楼层
原帖由 flw2 于 2007-8-6 09:26 发表


strcpy(a,c)好像比你的更简洁呀

效果不一样

论坛徽章:
0
8 [报告]
发表于 2007-08-06 09:30 |显示全部楼层
突然想到,strcpy返回值的设计是否也有为了遵循统一设计的需要?str类函数基本上都是返回指针的,象strchr之类的,只能返回指针,所以strcpy也就返回指针了,既然是返回嘛,当然返回目的。
有点象POSIX定义的函数,大多返回0或负值。

论坛徽章:
0
9 [报告]
发表于 2007-08-06 10:17 |显示全部楼层
原帖由 快乐的土豆 于 2007-8-6 10:09 发表

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

就算是这样,strcpy又怎么得知dest的大小呢?

论坛徽章:
0
10 [报告]
发表于 2007-08-06 12:59 |显示全部楼层
原帖由 lenovo 于 2007-8-6 12:52 发表

晕,那还咋讨论呀。

那就歇会吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP