用C 语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove函数的功能是拷贝src 所指的内存内容前n 个字节到dest 所指的地址上
#include <iostream.h>
/*
按字节拷贝时指针类型的转换,第二点就是内存有重叠
*/
void *memmove(void *dest,const void *src,size_t count)
{
void * ret = dest;
if (dest <= src || (char *)dest >= ((char *)src + count)) {
/*
* Non-Overlapping Buffers
* copy from lower addresses to higher addresses
*/
while (count--) {
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
}
else {
/*
* Overlapping Buffers
* copy from higher addresses to lower addresses
*/
dest = (char *)dest + count - 1;
src = (char *)src + count - 1;
while (count--) {
*(char *)dest = *(char *)src;
dest = (char *)dest - 1;
src = (char *)src - 1;
}
}
return(ret);
}
void main( )
{
char* p = "hello,world";
char dest[6] = {0};
char *q = (char*)memmove(dest,p,5);
cout<<q<<endl;
}