From: http://www.student.cs.uwaterloo.ca/~cs350/common/os161UWV3-src-html/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> using namespace std; void *memcpy(void *dest, const void *src, size_t len); void *memmove(void *dst, const void *src, size_t len) { size_t i; if((unsigned long)dst < (unsigned long)src){ return memcpy(dst, src, len); } /* * copy by word in the common case */ if ((unsigned long)dst % sizeof(long) == 0 && (unsigned long)src % sizeof(long) == 0 && len % sizeof(long) == 0) { long *d = (long *)dst; const long *s = (long *)src; for(i=len/sizeof(long); i > 0; i--){ d[i-1] = s[i-1]; } } else { char *d = (char*)dst; const char *s = (char *)src; for(i = len; i > 0; --i){ d[i-1] = s[i-1]; } } return dst; } void * memcpy(void *dst, const void *src, size_t len) { size_t i; /* * if word-alligned. commonly. */ if((unsigned long)dst % sizeof(long) == 0 && (unsigned long)src % sizeof(long) == 0 && len % sizeof(long) == 0) { long *d = (long*)dst; const long *s = (long *)src; for(i = 0; i < len/sizeof(long); i++){ d[i] = s[i]; } } else { char *d = (char *)dst; const char *s = (char *)src; for(i = 0; i < len; i++){ d[i] = s[i]; } } return dst; } int main() { char str[] = "memmove can be very useful..."; cout << str<<endl; memmove (str+20, str+15, 11); cout<<str<<endl; system("pause"); return 0; }