#include <iostream> #include <assert.h> using namespace std; void * memcpy1 (void * desAddr, const void * srcAddr, unsigned int count) { assert ((desAddr!=NULL) && (srcAddr!=NULL)); char * from = NULL; char * to = NULL; if ((desAddr==srcAddr) || (count==0)) { return NULL; } if (desAddr < srcAddr) { from = (char*)srcAddr; to = (char*)desAddr; while (count-- > 0) *to++ = *from++; } else { from = (char*)(srcAddr + count-1); to = (char*)(desAddr + count-1); while (count-- > 0) *to-- = *from--; } return desAddr; } int main() { int * to = (int*)malloc(sizeof(int) * 200); int * from = to + 50; for (int i=0; i<100; i++) { from[i] = i+1; } if (memcpy1 ((void*)to, (void*)from, sizeof(int)*100) == NULL) { cout << "something wrong!" << endl; } for (int i=0; i<100; i++) cout << to[i] << endl; free((from>to)?(to):(from)); return 0; }