欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > C语言——模拟实现strcpy

C语言——模拟实现strcpy

2024/10/24 5:18:18 来源:https://blog.csdn.net/CPP_ZhouXuyang/article/details/142175222  浏览:    关键词:C语言——模拟实现strcpy

首先我们先学习一下strcpy是怎么用的

#include <string.h>int main()
{char arr1[] = "hello world";char arr2[30] = { 0 };strcpy(arr2, arr1);printf("%s", arr2);return 0;
}

现在我们就要思考如何模拟实现了 

代码的初步实现非常简单哈~ 

char* my_strcpy(char* dest,const char* src)
{while (*src != '\0'){*dest = *src;src++;dest++;}*dest = *src;
}

 第一步优化:

char* my_strcpy(char* dest, const char* src)
{while (*src != '\0'){*dest++ = *src++;//后置++可以简化}*dest = *src;
}

再次优化:

char* my_strcpy(char* dest, const char* src)
{while (*dest++ = *src++)//等\0赋值过去,表达式为0,判断为假{;}
}

最后我们还能加入断言,限制传来的不能是空指针

char* my_strcpy(char* dest, const char* src)
{assert(dest != NULL);assert(src != NULL);while (*dest++ = *src++){;}
}

不过断言其实也有简化写法

char* my_strcpy(char* dest, const char* src)
{assert(dest);//如果是空指针,就是0,直接为假,就会报警assert(src);while (*dest++ = *src++){;}
}

或者再简写:

char* my_strcpy(char* dest, const char* src)
{assert(dest && src);//有一个为假就报警while (*dest++ = *src++){;}
}

最后把返回值补充一下,库函数会返回目标空间的起始地址,实际上返回的就是dest

那我们就需要提前存一份

char* my_strcpy(char* dest, const char* src)
{assert(dest && src);char* ret = dest;//提前存一份while (*dest++ = *src++){;}return ret;
}

这样模拟实现就非常精简高效的实现了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com