温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

“strcpy” 模拟的实现

发布时间:2020-06-24 02:00:15 来源:网络 阅读:356 作者:刘二阳二阳 栏目:编程语言

我们都知道 strcpy() 函数是字符串拷贝函数,那么我们怎样来模拟实现这个函数呢?!


首先,我们要明白,strcpy() 在拷贝字符串的时候是一个一个拷贝的,直到遇到字符串结束标志 '\0' 时才停止拷贝。所以,明白了这一点,我们就可一进行简单的模拟实现了

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

char *my_strcpy(char *str1, const char *str2)
{
	assert(str1);
	assert(str2);
	while(*str1 != '\0')        //目标地址遇到'\0'结束
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	//while(*str2 != '\0')     //注意判断条件一定不能这样写 
	//{
	//	*str1 = *str2;
	//	str1++;
	//	str2++;
	//}
	return str1;
}
int main()
{
	char str[10];                //目标地址一定要是一个字符数组
	char *pa = "abcdef";         
	my_strcpy(str,pa);
	printf("%s\n",str);
	system("pause");
	return 0;
}


由于目标地址是没有初始化的一个字符数组,它里边存的内容我们是不知道的,并且在拷贝的过程中它会连同 *pa 中的 '\0' 一块拷贝,所以 while 条件句中的判断是 *str1 != '\0' ,如果判断错误即写为 *str2 != '\0' ,那么就会得到以下结果。

“strcpy” 模拟的实现



关于 my_strcpy() 函数模拟实现的几点要求:

1.拷贝时是连同字符串中的 '\0' 一块拷贝的;

2.函数实参的设定:原字符串前要加 const 保护;

3.函数的返回值类型要是 char* 类型(便于链式访问);

4.进入函数内部,要对两个指针进行断言,判断指针是否为空;

5.函数要返回一个值(地址);

6.一定要进行优化


最优化代码:

char *my_strcpy(char *str1, const char *str2)
{
	assert(str1);
	assert(str2);
	while(*str1++ = *str2++)      
	{
		;
	}
	return str1;
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI