免费注册 查看新帖 |

Chinaunix

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

[C] 面试题strcpy返回值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-18 12:31 |只看该作者 |倒序浏览
已知strcpy函数的原型是
char *strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。NaTPt
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?

(1)我觉得下面就可以实现
void strcpy(char *s, const char *t)

{

while (*s++ = *t++)

;

}

(2)为什么还要char * 类型的返回值呢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2009-08-18 12:38 |只看该作者
楼主搜一下吧,答案遍地都是。

论坛徽章:
0
3 [报告]
发表于 2009-08-18 12:44 |只看该作者
void strcpy(char *s, const char *t); 这个是 K&R 上给出的声明,估计误导了不少不爱思考的人。

论坛徽章:
0
4 [报告]
发表于 2009-08-18 16:30 |只看该作者

回复 #1 culuckyabcd 的帖子

void strcpy(char *s, const char *t)
{
    char* p = s;
    while (*p++ = *t++);
}
lz的函数没注意指针位置的变化;
至于题目中要return char* 或许是这个意思:

char* strcpy(char *s, const char *t)
{
    char* p = s;
    while (*s++ = *t++);
    return p;//返回字符串首地址
}

有点别扭.

论坛徽章:
0
5 [报告]
发表于 2009-08-18 21:18 |只看该作者
void strcpy(char *s, const char *t)
{
    char* p = s;
    while (*p++ = *t++);
}
lz的函数没注意指针位置的变化;

其实这样做是没有必要的  函数中的参数修改不会影响main中指针的位置  

char* strcpy(char *s, const char *t)
{
    char* p = s;
    while (*p++ = *t++);  //假设main中有malloc了
    return p;
}

这样做一般是为了“链式表达”   比如strcat(strcpy(a,b),c)等等

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2009-08-18 21:29 |只看该作者

回复 #5 bqrvfhp 的帖子

原帖由 bqrvfhp 于 2009-8-18 21:18 发表
这样做一般是为了“链式表达”   比如strcat(strcpy(a,b),c)等等


那返回字符串尾('\0'的地址),不是能更好的支持链式表达?

论坛徽章:
0
7 [报告]
发表于 2009-08-18 22:35 |只看该作者
char *strcpy(char *dst, char *src)
{
    char *cp = dst;

    while (*cp++ = *src++)
        ;               /* Copy src over dst */
    return( dst );
}

论坛徽章:
0
8 [报告]
发表于 2009-08-19 08:35 |只看该作者
可以是一般情况下  strcat 等字符串函数  不论是库函数   还是自定义的实现函数  
内部实现的操作  都是从两个字符串的首字节开始的   对于返回一个'\0'的地址  好吗
真心请教...

论坛徽章:
0
9 [报告]
发表于 2009-08-19 10:34 |只看该作者
原帖由 OwnWaterloo 于 2009-8-18 21:29 发表


那返回字符串尾('\0'的地址),不是能更好的支持链式表达?


同楼上疑问

论坛徽章:
0
10 [报告]
发表于 2009-08-19 10:38 |只看该作者

回复 #6 OwnWaterloo 的帖子

返回末尾还怎么 printf(),怎么继续 strcpy() strcat() strdup()……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP