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

  • Post author:
  • Post category:其他




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 < (



版权声明:本文为kuang921011原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。