【C】库函数之memmove

Move block of memory

# include <string.h>
void * memmove(void * dest, const void * src, int count);

  Copies the values of num bytes from the location pointed by source to the memory block pointed by destination. Copying takes place as if an intermediate buffer were used, allowing the destination and  source to overlap.

  上述内容是C++官网对memmove函数的介绍,可以看出memmove函数从源src所指的内存地址的起始位置开始复制count个字节到目标dest所指的内存地址的起始位置中,允许目标字符串与源字符串重叠。

  接下来给出实现memmove函数的源代码:

#define _CRT_SECURE_NO_WARNINGS 1

/*
* Copyright (c) 2018, code farmer from sust
* All rights reserved.
*
* 文件名称:MyMemmove.c
* 功能:考虑内存重叠的内存复制
*
* 当前版本:V1.0
* 作者:sustzc
* 完成日期:2018年4月22日11:29:36
*/

# include <stdio.h>
# include <assert.h>

/*
*	函数名称:MyMemmove
*
*	函数功能:从src所指向的位置开始复制count个字节到dest所指向的位置,考虑内存重叠
*
*	入口参数:dest, src, count
*
*	出口参数:ret
*
*	返回类型:void *
*/

void * MyMemmove(void * dest, const void * src, int count)
{
	void * ret = dest;

	assert((NULL != dest) && (NULL != src));

	if(dest < src)
	{
		//从左到右
		while(count--)
		{
			*(char *)dest = *(const char *)src;
			dest = (char *)dest + 1;
			src = (const char *)src + 1;
		}
	}
	else
	{
		//从右到左
		while(count--)
		{
			*((char *)dest + count) = *((char *)src + count);
		}
	}
	
	return ret;
}

int main(void)
{
	char str1[20] = "abcd";
	char str2[20] = "bcdef";
	char * ret = NULL;

	printf("str1: %s\n", str1);
	printf("str2: %s\n", str2);

	ret = MyMemmove(str1, str2, 3);

	printf("memory move after, str1: %s\n", ret);

	return 0;
}

输出结果


猜你喜欢

转载自blog.csdn.net/sustzc/article/details/80237840
今日推荐