免费注册 查看新帖 |

Chinaunix

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

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

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

哥们,幽默

论坛徽章:
0
82 [报告]
发表于 2007-08-07 10:59 |只看该作者

回复 #8 cviolet 的帖子

敢问一句,人为什么要一天三餐,而不是一餐或是N餐

论坛徽章:
0
83 [报告]
发表于 2007-08-07 12:12 |只看该作者
原帖由 ruoyisiyu 于 2007-8-7 10:59 发表
敢问一句,人为什么要一天三餐,而不是一餐或是N餐


这个好像没有什么好说的吧,习惯问题。不是所有人都一天3顿饭。
如果人们一天4顿,那么问题就变为,人们为什么一天吃4顿,而不是5顿或者122顿。

论坛徽章:
0
84 [报告]
发表于 2007-08-07 12:56 |只看该作者
这帖子还不沉啊,那就再说几句。
那个叫什么链式的,真是又难看,又不能提高效率。
如果是重载处理字符序列的,返回长度的好处是很多的。
其实,就是什么链式的,返回长度也是优于返回首指针的。

  1. l = mystrcpy( d1, s );
  2. memcpy( d2, s, l+1 );
  3. memcpy( d3, s, l+1 );
  4. ...
复制代码

在效率上最少也会有20-30%的提升,有的系统下会超过50%。
最关键的是,返回长度不需要额外开销。

  1. size_t /*char * */
  2. mystrcpy( char *des, char *src )
  3. {
  4.   char *p = des;

  5.   while( *p++ = *src++ );

  6.   return( p - des - 1 );  /* return( des ); */
  7. }
复制代码

一般来说,要找到字符串的首指针用一个指令就行了,而要找出字符串的长度,就需要很多指令,而且着些指令中还包含了大量的条件指令,会增加很多系统开销。
返回长度能提供的好处:
1、显著提高效率
2、保持以负数表示函数调用失败的方式
3、能处理不以'\0'结束的字符序列,隔离函数实现细节(这在处理大字符流,而又不想写一个很长函数的时候是非常方便的)
而这只需要牺牲什么链式表达,值不值得只有你自己判断了。

论坛徽章:
0
85 [报告]
发表于 2007-08-07 13:01 |只看该作者
其实这个问题通过以上讨论已经有结论了。

要将strXXX, memXXX系列函数许多都返回dest一起看。

dest指针在c中代表字符串本身。而长度不代表字符串,仅仅是他的一个属性。

系列函数返回计算结果(dest)是理所当然的。使得函数可以做为EXPRESSION的一部分。

论坛徽章:
0
86 [报告]
发表于 2007-08-07 13:07 |只看该作者
在glibc 中(最精彩的C程序了,可以算是)

strcpy (stpcpy (stpcpy (fullname, fname), "/"), locnames[cnt]);

有许多。

我们平时很少用,不代表没有用。

论坛徽章:
0
87 [报告]
发表于 2007-08-07 13:22 |只看该作者
算长知识了,也确实开眼了,美女好PP。

论坛徽章:
0
88 [报告]
发表于 2007-08-07 15:27 |只看该作者
这么简单的东西,一个sprintf就能完成,却写得如此晦涩,效率又低。这样的程序拿来玩玩还可以,没必要推崇。离最精彩的更是相去甚远。如果我的程序员在项目里这么写,挨批是免不了的。
而且stpcpy是非标的,返回的是字符串尾,和返回字符串本身风马牛不相及,这个函数的产生也说明,他的作者对strcpy返回字符串首指针是不赞同的。

论坛徽章:
0
89 [报告]
发表于 2007-08-07 15:30 |只看该作者

论坛徽章:
0
90 [报告]
发表于 2007-08-07 15:36 |只看该作者
返回串尾?


原帖由 yg 于 2007-8-7 15:27 发表
这么简单的东西,一个sprintf就能完成,却写得如此晦涩,效率又低。这样的程序拿来玩玩还可以,没必要推崇。离最精彩的更是相去甚远。如果我的程序员在项目里这么写,挨批是免不了的。
而且stpcpy是非标的,返回 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP