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;
}

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

相关推荐
SuperByteMaster3 小时前
while(1){;} 加分号
c语言
闻缺陷则喜何志丹3 小时前
详细设计说明书的内容要求
算法·测试·存储
阿里嘎多学长3 小时前
2026-10-13 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出糖葫芦派对中的“独一无二山楂果数量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
和裕3 小时前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
巧克力味的桃子3 小时前
复杂网络能控性鲁棒性研究进展
开发语言·网络·php
普通人64 小时前
php处理百度编辑器有误html
开发语言·编辑器·html·php·1024程序员节
Tisfy4 小时前
LeetCode 3723.数位平方和的最大值:构造
数学·算法·leetcode·字符串·题解
hetao17338374 小时前
联盟场-提高组-R4 & ZYZSC-S-Round 7
c++·算法
沉下心来学鲁班4 小时前
具身智能入门:用 Python 让 MicroDuck 机器狗学会走路
开发语言·人工智能·python·机器人