strcpy的实现

在实现strcpy之前我们必须了解strcpy的源函数

char* strcpy(char* dest, const char* src)

作用:
1.把source的源字符串,拷贝到目标空间的过程
2.源字符串必须以’\0’作为结束
3.同时也会将源字符串中的’\0’拷贝到目标空间

注意:
1我们可以看到strcpy的返回值不是void而是char
2.scr源函数前面有个const

在实现的时候的我们最先能想到的代码

void my_strcpy(char* dest, char* scr)
{
	while (*scr)
	{
		*dest++ = *scr++;//每次拷贝两个指针都向后移动.
	}
	*dest = *scr;//这一句是为了拷贝'\0'
}

但是,经过优化会有下面这段代码,两个含义一样

void my_strcpy(char* dest, char* scr)
{
	while (*dest++=*scr++)//这里每次以scr传给des的值作为判断条件,什么时候传到0,什么时候停止.也保证了'\0'也传过去了
	{
		;
	}
	
}

但这段函数我们是在传指针,如果指针为空会很麻烦,所以这里我们新介绍一个assert的库函数,assert的作用就是当传入空指针的时候会报错
同时我们发现源代码的返回值是char*

char* my_strcpy(char* dest, const char* scr)
{
	char* ret = dest;//保存dest最初的位置用于最后返回
	assert(dest != NULL);
	assert(scr != NULL);
	while (*dest++ = *scr++)
	{
		;
	}
	return ret;
}

由const引起的小知识点:
1.

const char *p = "abcdef"; //指向常量的指针,不允许改变指针指的内容

char* const p = "abcdef";//常指针,不能改变指向
char* p1 = NULL;
const char* p2 =NULL;
p1 = p2;//不可以赋值
p2 = p1;//可以赋值

原因:可以高权限往低权限赋值,但不能低权限往高权限赋值.
因为 p1可以修改(高权限),而p2因为const的限制不能修改内容(低权限)
,所以p1可以赋给p2,反之则不行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值