8164|24

1672

帖子

0

TA的资源

裸片初长成(初级)

楼主
 

C语言降龙十八掌——第三掌 写对strcpy,你也可以进微软 [复制链接]

好吧,我承认我在玩标题党。我没有去微软面试过,标题里面的微软,指的是同学们心向往之而不得的大公司。
这是我在职业生涯刚刚起步时,去某业内非常知名的,无数学子向往的一个大公司面试的时候被问到的一个问题。
当时回答得也不全面,回来思考了一下以后,就经常用这个问题来面试别人了。以我的经验,这道题可以很清楚地把那些只会死记硬背的应届生“秒杀”。
这个问题分几步:
1,写一个strcpy函数。
2,。。。
大家先做第一步吧,我会像前两篇一样,逐渐引导大家深入到其中去,最后,我们会发现,这个标准的库函数,其中竟然有如此多的秘密。
此帖出自编程基础论坛

最新回复

期待楼主的第四掌!~~  详情 回复 发表于 2009-11-17 11:13
点赞 关注
 

回复
举报
redstone9910 该用户已被删除
沙发
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

嗯,这个答案很标准

标准的只会死记硬背的应届生做出来的答案,秒杀之~
开玩笑的,呵呵。这段代码的确能实现功能,但没有考虑到一些异常的问题。
譬如,如果dest是个空指针,执行的后果是什么?
此帖出自编程基础论坛
 
 
 

回复
redstone9910 该用户已被删除
4
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复
redstone9910 该用户已被删除
5
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复
redstone9910 该用户已被删除
6
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

7
 

再想想?

如果src字串和dest字串有over lap,后果会怎样?
此帖出自编程基础论坛
 
 
 

回复

148

帖子

3

TA的资源

五彩晶圆(初级)

8
 

回复 7楼 richiefang 的帖子

运行时,提示此地址不能被written
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

9
 

回复 8楼 feman5012 的帖子

呵呵。想过没有为什么会出这个提示?
这个提示和x86体系结构、Windows操作系统是相关的。其本质是什么?
此帖出自编程基础论坛
 
 
 

回复

103

帖子

0

TA的资源

五彩晶圆(初级)

10
 

垃圾!哈哈!

1.首先我要表明的是*str指的是什么东西?
如果一个字符就是0得话,你不是*str=0吗?
2.提示此地址不能被written 那是你的要复制的字符没有写初始值。
3. 正确的垃圾代码是:
char *strcpy(char *dest,char *src)
{
char *ret
ret= src;
return ret;
}
此帖出自编程基础论坛
 
个人签名FPGA遥远的事情,我现在在画PCB
 
 

回复

1908

帖子

7

TA的资源

五彩晶圆(高级)

11
 

持续关注两位高手过招,哈哈

弱弱的问一句,strcpy函数是什么,做什么用的?
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

12
 

回复 10楼 sadlife1000 的帖子

这么做真的会拷贝字符串吗?
此帖出自编程基础论坛
 
 
 

回复
redstone9910 该用户已被删除
13
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

2498

帖子

0

TA的资源

至上芯片

14
 

my anwser

char *strcpy(char *strDest,const char *strSrc)
{
if(strDest==NULL||strSrc==NULL)
return NULL;

if(strDest==strSrc)
return strDest;

char *temppptr=strSest;
while((*strDest++==*strSrc++)!='\0')
;
return tempptr;
}
此帖出自编程基础论坛
 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 
 

回复

60

帖子

0

TA的资源

一粒金砂(高级)

15
 
原帖由 gaoxiao 于 2009-11-3 19:37 发表
char *strcpy(char *strDest,const char *strSrc)
{
if(strDest==NULL||strSrc==NULL)
return NULL;

if(strDest==strSrc)
return strDest;

char *temppptr=strSest;
while((*strDest++==*strSrc++)!='\0 ...



学习!想起了const表示只读。
此帖出自编程基础论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

16
 
对,后面的参数应该是不可更改的!
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

17
 
呵呵,其实很多同学的答案已经很接近标准答案了。
其实,我想引导大家讨论的,主要是这个问题:ASSERT的作用,以及ASSERT和assert的区别?
此帖出自编程基础论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(高级)

18
 
关注中……
此帖出自编程基础论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

19
 
都是高手啊 (*^__^*) 嘻嘻……
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

20
 

两个strcpy的实现,供参考

这个是Linux里面的strcpy的实现:

char *strcpy(char *dest, const char *src)
{
        char *tmp = dest;

        while ((*dest++ = *src++) != '\0')
                /* nothing */;
        return tmp;
}

另一个网络操作系统的strcpy的实现:
char *strcpy(char *dest, const char *src)
{
    ASSERT (src & dest);
    char *tmp = dest;

    while ((*dest++ = *src++) != '\0')
   
    return tmp;
}
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表
  缈昏瘧锛