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 :
'C' 카테고리의 다른 글
[C] 107 포인터를 함수에서 사용하기 (1) | 2021.01.28 |
---|---|
[C] 106 포인터 사용하기 (1) | 2021.01.28 |
[C] 104 메모리를 복사하는 함수 만들기 (1) | 2021.01.28 |
[C] 103 메모리 채우기 memset() (1) | 2021.01.28 |
[C] 102 메모리 이동하기 memmove() (1) | 2021.01.28 |