实现Strcpy(字符串拷贝)

字符串拷贝:考虑与不考虑内存重叠
博客围绕字符串拷贝展开,分别介绍了不考虑内存重叠和考虑内存重叠两种情况的字符串拷贝。涉及 destStr 指向拷贝后的字符串、str 指向原字符串以及 cnt 表示字符串长度等关键信息。

字符串拷贝(不考虑内存重叠)

char* myStrcpy(char* destStr,const char* str)
{
	//字符串有有效性检查,assert断言返回false则中止程序运行
	assert(destStr != NULL || str != NULL);
	char* temp = destStr;
	//while((*destStr++ = *str++) !='\0');
	//将str赋值给destStr,判断destStr !='\0',条件成立则说明字符串拷贝结束(字符串以'\0'结尾)
	while((*destStr = *str) !='\0')
	{
		str++;
		destStr++;
	}
	return temp;
}

字符串拷贝(内存重叠)

1.destStr 指向拷贝后的字符串
2. str 指向原字符串
3.cnt 字符串长度

char* myStrcpy(char* destStr,const char* str,int cnt)
{
	//字符串有有效性检查,assert断言返回false则中止程序运行
	assert(destStr != NULL || str != NULL);
	char* temp = destStr;
	if (destStr>= str&& destStr<= str+cnt-1) //内存重叠,从高地址开始复制
    {
        destStr= destStr+cnt-1;
        str= str+cnt-1;
        while (cnt--)
            *destStr-- = *str--;
    }
    else    //正常情况,从低地址开始复制
    {
        while (cnt--)
            *destStr++ = *str++;
    }
	return temp;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值