Desc :

 

 


Source Code :

#include <stdio.h>
#include <string.h>

char s[20] = "1234567890";

void* My_memmove(void* dst, const void* src, unsigned int count);

void main()
{
	puts(s);
	My_memmove(s + 4, s + 2, 6);
	puts(s);
}

void* My_memmove(void* dst, const void* src, unsigned int count)
{
	void * ret = dst;

	if (dst <= src || (char*)dst >= (char*)src + count) //  dst와 src영역이 겹쳐지지 않는 경우
	{
		while (count--)
		{
			*(char*)dst = *(char*)src;
			dst = (char*)dst + 1;	// 앞에서 뒤로 가며 메모리 이동
			src = (char*)src + 1;
		}
	}
	else	// 영역이 겹쳐지는 경우
	{
		dst = (char*)dst + count - 1;	// 뒤 번지로 지정
		src = (char*)src + count - 1;

		while (count--)
		{
			*(char*)dst = *(char*)src;
			dst = (char*)dst - 1;		//뒤에서 앞으로 가며 메모리 이동
			src = (char*)src - 1;
		}
	}

	return ret;
}

 


Result :

+ Recent posts