【2.7】模拟实现库函数strcpy

标准库函数:

char *strcpy( char *strDestination, const char *strSource );

使用strcpy函数

模拟strcpy函数

注:上面的代码中,my_strcpy函数的返回类型为空,我忘记加上了。

优化my_strcpy()函数(优化程度依次加深)

第一种:

my_strcpy(char* dest, char* src)
{
	while (*src != '\0')
	{
		*dest ++ = *src ++;
                            //拷贝hello
	}
	*dest = *src; 
                            //拷贝'\0'
}

第二种:

my_strcpy(char* dest, char* src)
{
	while (*dest++ = *src++)
		;
}
//既完成了拷贝,又完成了停下来的动作

第三种:

Q:如果传的是空指针?

A:空指针不能解引用操作,我们需要优化来保护指针。

1)断言

保护指针指向的内容不被修改。

2) const

放在*左边

 放在*右边

 优化后:

void my_strcpy(char* dest,const char* src)
//const会在数组放反的时候报错
//const修饰变量,这个变量被称为常变量,不能被修改,但本质上还是变量
{
	assert(src != NULL);//断言----->判断指针是否不是空指针
	assert(dest != NULL);//断言
	while (*dest++ = *src++)
		;
}
	

int main()
{
	char arr1[20] = { "*************" };
	char arr2[] = { "hello" };
	my_strcpy(arr1, arr2);
	printf("%s", arr1);

	return 0;
}

 第四种:

char* my_strcpy(char* dest,const char* src)
{
	assert(src != NULL);//断言
	assert(dest != NULL);//断言
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;//返回目标空间的起始地址
}
	

int main()
{
	char arr1[20] = { "*************" };
	char arr2[] = { "hello" };
	
	printf("%s", my_strcpy(arr1, arr2)); //链式访问

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值