C语言字符函数及其实现2

前一篇:http://t.csdnimg.cn/Q7PXQ

memcpy——拷贝函数

void * memcpy ( void * destination, const void * source, size_t num );

  1. 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
  2. 这个函数在遇到 '\0' 的时候并不会停下来。
  3. 如果source和destination有任何的重叠,复制的结果都是未定义的。
void* my_memcpy(void* dst, const void* src, size_t n)
{
    assert(dst && src);//防止空指针
	void* ret = dst;
	while (n--)
	{
		*(char*)dst = *(char*)src;
        //1
		dst= (char*)dst+1;
		src= (char*)src+1;
        //2  也可以用下面这种
        ++(char*)dst;
		++(char*)src;
	}
	return ret;
}

memmove——可以实现自己拷贝自己

void * memmove ( void * destination, const void * source, size_t num );

  1. 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
  2. 如果源空间和目标空间出现重叠,就得使用memmove函数处理
  3. num指的是要拷贝多少字节
void* my_memmove(void* dst, const void* src, size_t num)
{
	assert(dst && src);
	char* ret = dst;
	if (dst < src)//从前往后拷贝
	{
		while (num--)
		{
			*(char*)dst = *(char*)src;
			++(char*)dst;
			++(char*)src;
		}
	}
	else if (dst > src)
	{
		while (num--)//从后往前拷贝
		{
			*((char*)dst + num) = *((char*)src + num);
		}
	}
	return ret;
}

memcmp——比较大小

int memcmp ( const void * ptr1,const void * ptr2,size_t num );

  1.  比较从ptr1和ptr2指针开始的num个字节
  2. 返回值如下:

int my_memcmp(const void* buf1, const void* buf2, size_t num)
{
	assert(buf1 && buf2);
	while (num--)
	{
		if (*(char*)buf1 == *(char*)buf2)
		{
			++(char*)buf1;
			++(char*)buf2;
		}
		return *(char*)buf1 - *(char*)buf2;
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值