C语言模拟实现memmove函数

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

void* mymemmove(void* dest, void* src, size_t n)
{
	void* ret = dest;
	assert(dest != NULL && src != NULL);
	if (dest <= src || (char*)dest >= ((char*)src + n))
	{
		while (n--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		src = (char*)src + n - 1;
		dest = (char*)dest + n - 1;
		while (n--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest - 1;
			src = (char*)src - 1;
		}
	}

	return ret;
}

int main()
{
	char str1[20] = "today is good";
	char* p = (char*)mymemmove(str1 + 1, str1, strlen(str1) + 1);
	printf("%s\n", p);
	return 0;
}

实现结果:

 


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