一步一步教你模拟实现strcpy、strcat及用法

1.前言

strcpy和strlen是我们在c语言中经常用到的两个库函数,今天我来教大家怎样去模拟实现这两个函数,那有人会问,为什么要去模拟实现这两个函数呢?答案是当我们去模拟实现函数时,我们能够对这个函数有一个更好的理解,比如,当我们模拟实现函数后,我们能够知道这个函数的内部实现的过程,以及应该传什么参数,和这个函数返回什么类型,以至于加深对这个函数的印象。

2.strcpy(复制一个字符串)

strcpy的基本概括如下:
char *strcpy( char strDestination, const char strSource ),很多人会以为strcpy的使用是将整个字符串传进去,但我们可以看到strcpy传进去的参数是两个char的地址,返回类型也是char,strcpy函数的作用是:将strSource(包括结束符null)复制到strDestination指定的位置。如果你觉得概念太模糊了,那么我们来看一个例子:

#include<stdio.h>
#include<string.h>
int main()
{
	char str[80];
	strcpy(str, "hello ");
	strcpy(str, "world");
	printf("%s\n", str);
	return 0;
}

在这里插入图片描述
输出的结果为world,可见strcpy把hello给覆盖掉了
那么,我们来模拟实现strcpy

char* my_strcpy(char* pa,const char *pc)
{
	assert(pa&&pc);
	//若pa和pc为空指针,程序会报错,可以保护程序
	while (*pc != '\0')
	{
		*pa = *pc;
		pa++;
		pc++;
	}
	*pa = '\0';
	return pa;
}
int main()
{
	char str[80];
	my_strcpy(str, "hello world");
	//数字名表示的是首元素的地址,hello world传进去的也是首元素的地址
	printf("%s\n", str);
	return 0;
}

还有更简洁的代码是`

char* my_strcpy(char* pa,const char *pc)
{
	assert(pa&&pc);
	while (*pa++ = *pc++)
	//因为为后置++,所以先赋值,后++,最后才判断,当遇到\0时,判断条件为假,循环结束
	{

	}
	return pa;
}
int main()
{
	char str[80];
	my_strcpy(str, "hello world");
	printf("%s\n", str);
	return 0;
}

strcat(连接一个字符串)

char *strcat( char strDestination, const char strSource );同样,参数为两个char的指针,返回类型为char的指针,函数的作用是:将strSource追加到strDestination,并以空字符结束结果字符串。strSource的初始字符覆盖了strDestination的结束null字符。
在这里插入图片描述
接下来,我们来模拟实现strcat

char* my_strcat(char * pa, const char* pc)
{
	//先找到str数组的\0
	while(*pa != '\0')
	{
		pa++;
	}
	//然后在\0处进行赋值
	while (*pa++ = *pc++)
	{

	}
	return pa;
}
int main()
{
	char str[80] = "hello ";
	my_strcat(str, "world");
	printf("%s\n", str);
	return 0;
}
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值