【手把手带你刷好题】——22.面试题:模拟实现strcpy库函数(非力扣)

举报
安然无虞 发表于 2022/05/27 00:36:48 2022/05/27
【摘要】 【前言】 今天是刷题打卡第22天! 这是一道很好的题目哦,里面有一些很好的coding技巧,要留心看哦。 原题:模拟实现strcpy库函数 OK,废话不多说,直接上代码... 初级代码: 满分10分---得5分 #include<stdio.h> void my_strcpy(char...

【前言】

今天是刷题打卡第22天!

这是一道很好的题目哦,里面有一些很好的coding技巧,要留心看哦。

原题:模拟实现strcpy库函数

OK,废话不多说,直接上代码...

初级代码:

满分10分---得5分


  
  1. #include<stdio.h>
  2. void my_strcpy(char* dest, char* src)
  3. {
  4. while (*src != '\0')
  5. {
  6. *dest = *src;
  7. dest++;
  8. src++;
  9. }
  10. *dest = *src;//处理src后面的'\0'
  11. }
  12. int main()
  13. {
  14. char arr1[10] = { 0 };//注意哦,arr1要足够大
  15. char arr2[] = "hello";
  16. my_strcpy(arr1, arr2);
  17. printf("%s\n", arr1);//返回arr1的起始地址
  18. return 0;
  19. }

【敲黑板】:对于字符串拷贝函数,要注意的是是字符串2拷贝给字符串1的,包括字符串2后面的‘\0’ 也会一同拷贝过去,并且要保证 字符串1是足够大的!

优化代码: 

满分10分---得9分


  
  1. #include<stdio.h>
  2. #include<assert.h>
  3. void my_strcpy(char* dest, char* src)
  4. {
  5. assert(dest != NULL);//断言---加上断言,防止传过来的指针为空引发错误(老司机才会这样写)
  6. assert(src != NULL);//注意哦,要培养自己加上断言的好习惯
  7. while (*dest++ = *src++)//当src指向的对象是'\0'时表达式的结果为0,整个表达式的结果为假,跳出循环--很妙
  8. {
  9. ;
  10. }
  11. }
  12. int main()
  13. {
  14. char arr1[10] = { 0 };//注意哦,arr1要足够大
  15. char arr2[] = "hello";
  16. my_strcpy(arr1, arr2);
  17. printf("%s\n", arr1);//返回arr1的起始地址
  18. return 0;
  19. }

在写最优代码之前,先看看库函数strcpy原型:

 

 

函数有返回类型,而且在第二个形参中加入了const 修饰,目的是防止字符串strSource被改变 

最优代码:

满分10分---得10分


  
  1. #include<stdio.h>
  2. #include<assert.h>
  3. char* my_strcpy(char* dest, const char* src)//注意哦,要习惯加上const修饰
  4. {
  5. assert(dest && src);//断言dest和src都不为空
  6. char* ret = dest;//保存dest首地址
  7. while (*dest++ = *src++)
  8. {
  9. ;
  10. }
  11. return ret;
  12. }
  13. int main()
  14. {
  15. char arr1[10] = { 0 };//注意哦,arr1要足够大
  16. char arr2[] = "hello";
  17. printf("%s\n", my_strcpy(arr1, arr2));
  18. return 0;
  19. }

结语

今天是刷题打卡第22天!

再接再厉啦,明儿见!

 

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/121457507

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。