C语言之memcpy函数

函数原型】:void *memcpy(void *dst, const void *src, size_t n)

头文件】:#include <string.h>

函数说明】:从源src所指的内存地址的起始位置开始拷贝n个字节到dst所指的内存地址的起始位置中

参数】:1)[OUT] dst:目的数组的首地址

                2)[IN] src:源数组的首地址

                3)[IN] n:size_t为无符号整型,拷贝的字节数

注:src和dst所指内存区域不能重叠

src和dst地址重叠的情况:

       内存重叠是指目的地址的内存空间的首地址,包含在源内存空间中,这两段内存空间有了交集,因此在使用memcpy函数进行内存复制操作时,这段重叠的内存空间会被破坏。

       


C语言实现如下:

void* memcpy(void *dst, const void *src, size_t size_t n)
{
	size_t i;
	
	if((dst == NULL) || (src == NULL) || (n < 0))
	{
		return NULL;	
	}
	
	if((src > dst) || ((src + n) < dst))  //内存不重叠,从头向尾复制
	{
		for(i = 0; i < n; i++)
		{
			dst[i] = src[i];
		}		
	}
	else                                  //内存重叠,从尾向头开始复制
	{
		for(i = n; i < 0; i--)
		{
			dst[i] = src[i];
		}
	}
	
	return dst;
}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值