【手把手带你刷好题】——22.面试题:模拟实现strcpy库函数(非力扣)
【摘要】
【前言】
今天是刷题打卡第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)