memmove的实现要考虑内存重叠的情况
#include<stdio.h>
#include<assert.h>
#include<windows.h>
#pragma warning (disable:4996)
void *my_memmove(void *dst, const void *src, int count)
{
assert(dst);
assert(src);
assert(count > 0);
char *ret = dst;
if (src >= dst || (char*)dst >= (char*)src + count)
{
while (count-->0)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else//逆序
{
char *dst_end = *(char*)dst + count - 1;
char *src_end = *(char*)src + count - 1;
while (count-->0)
{
*dst_end = *src_end;
dst_end--;
src_end--;
}
}
return ret;
}
int main()
{
char msg[] = "asde123";
char mag[32];
int count = strlen(msg) + 1;
my_memmove(mag, msg, count);
printf("%s\n", mag);
system("pause");
return 0;
}