1.memmove的模拟实现
//模拟实现memmove
#include <stdio.h>
#include <assert.h>
void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);
while (num--)
{
//前->后if (dest < src)
{
*(char*)dest = *(char*)src;
dest++;
src++;
}
//后->前else
{
*(char*)(dest+num) = *(char*)(src+num);
}
}
}
int main()
{
char str[] = "abcdefg";
my_memmove(str+3, str, 4);
printf("%s\n", str);
return 0;
}
2.memcpy的模拟实现
//模拟实现memcpy
#include <stdio.h>
#include <assert.h>
int my_memcpy(const void* ptr1, const void* ptr2, size_t num)
{
assert(ptr1 && ptr2);
while (*(char*)ptr1 == *(char*)ptr2)
{
ptr1++;
ptr2++;
num--;
if (num == 0)
{
return 0;
}
}
if (*(char*)ptr1 > *(char*)ptr2)
{
return 1;
}
else if (*(char*)ptr1 < *(char*)ptr2)
{
return -1;
}
}
int main()
{
char str1[] = "abcdefg";
char str2[] = "abcdegf";
int ret = my_memcpy(str1, str2, sizeof(str1));
if (ret>0)
{
printf("str1>str2\n");
}
else if (ret<0)
{
printf("str1<str2\n");
}
else
printf("str1=str2\n");
return 0;
}