免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
91 [报告]
发表于 2007-08-07 15:37 |只看该作者
原帖由 思一克 于 2007-8-7 15:36 发表
返回串尾?

莫非你没注意到?

BTW:GNU 的代码,垃圾的也有很多。
glibc 也是一样。
我觉得你贴出来的那段代码就很垃圾。

论坛徽章:
0
92 [报告]
发表于 2007-08-07 16:28 |只看该作者
哪有返回末尾的?返回dest.

GLIBC的代码是一定是千锤百炼的。因为是给无数应用做基础的。

原帖由 flw 于 2007-8-7 15:37 发表

莫非你没注意到?

BTW:GNU 的代码,垃圾的也有很多。
glibc 也是一样。
我觉得你贴出来的那段代码就很垃圾。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
93 [报告]
发表于 2007-08-07 16:38 |只看该作者
原帖由 思一克 于 2007-8-7 16:28 发表
哪有返回末尾的?返回dest.

GLIBC的代码是一定是千锤百炼的。因为是给无数应用做基础的。


哦?
我没用过那个函数,我只是猜的。
不过,如果返回的不是末尾的话,
  1. strcpy (stpcpy (stpcpy (fullname, fname), "/"), locnames[cnt]);
复制代码

岂不是等效于 strcpy( fullname, locnames[cnt] ) ?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
94 [报告]
发表于 2007-08-07 16:41 |只看该作者
  1. flw@Sleeper:~$ man stpcpy 2>/dev/null | grep -A 5 RETURN
  2. RETURN VALUE
  3.        stpcpy() returns a pointer to the end of the string dest (that is,  the
  4.        address of the terminating null byte) rather than the beginning.

  5. CONFORMING TO
  6.        This  function  is  not  part of the C or POSIX.1 standards, and is not
  7. flw@Sleeper:~$
复制代码

返回的是末尾。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
95 [报告]
发表于 2007-08-07 16:44 |只看该作者
> GLIBC的代码是一定是千锤百炼的。因为是给无数应用做基础的。
glibc 的代码是给应用程序用的是不假,
但是这段代码的风格的确很糟糕。

论坛徽章:
0
96 [报告]
发表于 2007-08-07 16:59 |只看该作者
什么系统上? return end of dest?



NAME
       strcpy, strncpy - copy a string

SYNOPSIS
       #include <string.h>

       char *strcpy(char *dest, const char *src);

       char *strncpy(char *dest, const char *src, size_t n);

DESCRIPTION
       The  strcpy() function copies the string pointed to by src (including the terminating `\0'
       character) to the array pointed to by dest.  The strings may not overlap, and the destina

RETURN VALUE
       The strcpy() and strncpy() functions return a pointer to the destination string dest.

[ 本帖最后由 思一克 于 2007-8-7 17:04 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
97 [报告]
发表于 2007-08-07 17:08 |只看该作者
原帖由 思一克 于 2007-8-7 16:59 发表
什么系统上? return end of dest?



NAME
       strcpy, strncpy - copy a string

SYNOPSIS
       #include

       char *strcpy(char *dest, const char *src);

       char *strncpy(cha ...

你举的例子是 stpcpy,不是 strcpy。
看,你也晕了吧?
这就充分说明它那个风格很不好,很容易把人看晕。

论坛徽章:
0
98 [报告]
发表于 2007-08-07 17:16 |只看该作者
例子晕了,前面的例子还没有晕呀。

dest无非就是函数的“计算”结果,不返回它返回什么?和其他strXXX函数一起看,返回dest太自然不过的了。

论坛徽章:
0
99 [报告]
发表于 2007-08-07 17:21 |只看该作者
原帖由 yg 于 2007-8-7 15:27 发表
这么简单的东西,一个sprintf就能完成,却写得如此晦涩,效率又低。这样的程序拿来玩玩还可以,没必要推崇。离最精彩的更是相去甚远。如果我的程序员在项目里这么写,挨批是免不了的。
而且stpcpy是非标的,返回 ...



支持下...

开个玩笑:
估计是代码混淆器....故意让别人看不懂吧

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
100 [报告]
发表于 2007-08-07 17:24 |只看该作者
原帖由 思一克 于 2007-8-7 17:16 发表
例子晕了,前面的例子还没有晕呀。

dest无非就是函数的“计算”结果,不返回它返回什么?和其他strXXX函数一起看,返回dest太自然不过的了。

我没有说返回 dest 不自然。
我尊重这种做法。
但是我认为不返回也没什么,
我的观点是返回也行,不返回也行,即不讨厌返回,也不认为一定要返回。
但是有一点我想说的是:
绝对不能为了证明 strcpy 的返回值不是个蛇足而提倡类似于 strcpy( strcpy( strcpy ... ) ) ) 的做法,
我认为在一个代码行里做两件或者两件以上的事是非常糟糕的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP