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

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

【前言】

今天是刷题打卡第22天!

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

原题:模拟实现strcpy库函数

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

初级代码:

满分10分---得5分


      #include<stdio.h>
      void my_strcpy(char* dest, char* src)
      {
     	while (*src != '\0')
      	{
      		*dest = *src;
      		dest++;
      		src++;
      	}
      	*dest = *src;//处理src后面的'\0'
      }
      int main()
      {
     	char arr1[10] = { 0 };//注意哦,arr1要足够大
     	char arr2[] = "hello";
     	my_strcpy(arr1, arr2);
     	printf("%s\n", arr1);//返回arr1的起始地址
     	return 0;
      }
  
 

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

优化代码: 

满分10分---得9分


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

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

 

 

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

最优代码:

满分10分---得10分


      #include<stdio.h>
      #include<assert.h>
      char* my_strcpy(char* dest, const char* src)//注意哦,要习惯加上const修饰
      {
     	assert(dest && src);//断言dest和src都不为空
     	char* ret = dest;//保存dest首地址
     	while (*dest++ = *src++)
      	{
      		;
      	}
     	return ret;
      }
      int main()
      {
     	char arr1[10] = { 0 };//注意哦,arr1要足够大
     	char arr2[] = "hello";
     	printf("%s\n", my_strcpy(arr1, arr2));
     	return 0;
      }
  
 

结语

今天是刷题打卡第22天!

再接再厉啦,明儿见!

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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