1.mommove
a为目标地址,b为源地址,n为移动距离
void* my_memmove(void* a,const void* b,int n)
{
assert(a!=NULL && b!=NULL);
void* tmp = a;
if (a <= b || (char*)a >= ((char*)b + n))
{
while (n--)
{
*(char*)a = *(char*)b;
a = (char*)a + 1;
b = (char*)b + 1;
}
}
else
{
a = (char*)a + n - 1;
b = (char*)b + n - 1;
while (n--)
{
*(char*)a = *(char*)b;
a = (char*)a - 1;
b = (char*)b - 1;
}
}
return tmp;
}
一定注意移动后会不会后面移动的影响前面的。
2.momcpy
void* my_memcpy(void* a, const void* b, int n)
{
assert(a && b);
char* tmp = (char*)a;
char* tmp2 = (char*)b;
while (n--)
{
*tmp++ = *tmp2++;
}
return a;
}