【C语言函数memcpy与memmove的区别】

本文介绍了C语言中的memcpy与memmove函数,包括它们的使用、区别以及如何自行实现这两个函数。memcpy负责简单地拷贝内存,不处理重叠问题,而memmove则会处理内存重叠的情况。文章提供了my_memcpy和my_memmove的代码实现,并详细解释了处理内存重叠的两种情况。
摘要由CSDN通过智能技术生成

memcpy与memmove的介绍

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

memcpy()与memmove()都是C语言的两个库函数,他们的头文件都是string.h。他们的功能都是对内存地址进行拷贝操作的,都是将以source地址开始的num个字节长度的数据拷贝到以destination地址开始的num个字节的内存上去。

memcpy与memmove的区别

  • memcpy只负责拷贝,不判断是否有内存重叠的问题,需要调用者自己进行确认。
  • memmove不仅负责拷贝,其函数内部还进行了内存重叠问题的判断处理。

自己实现my_memcpy与my_memmove

在C语言面试中经常会遇到面试题,让面试者自己实现memcpy()或memmove(),并要处理内存重叠的情况。下面是我本地自己实现的memcpy()和memmove()的代码.

  • my_memcpy()的实现:
void* my_memcpy(void* dest, const void* src, size_t count)
{
   
	//判断传入指针的合法性
	if (dest == NULL || src == NULL) {
   
		return NULL;
	}
	//定义一个临时指针记录dst的起始地址
	void* ret = dest;
	while (count--) {
   
		*(char*)dest = *(char*)src;
		dest = (char*)dest+1;
		src = (char*)src+1;
	}

	return ret;
}

验证my_memcpy()代码实现:

struct Stu {
   
	char name[10];
	int age;
};
void func_test() {
   
	int dest[] = {
   1,2,3,4,5};
	int src[] = {
   6,7,8,9,10};
	my_memcpy(dest,src,sizeof(src));
	printf("打印拷贝后dest的内容:\n");
	for (int i = 0; i < (
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值