0
点赞
收藏
分享

微信扫一扫

【2.7】模拟实现库函数strcpy

鱼满舱 2022-02-08 阅读 36

标准库函数:

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 条评论