static char * strcpy(char *dest, const char *src) { assert(dest != NULL && src != NULL); char *ret = dest; while ((*dest++ = *src++) != '/0'); return ret; } memcpy实现: #include <cstdlib> #include <iostream> using namespace std; const int MAX = 100; /*handle overlap case*/ void* __memcpy_handlOverlap(void *dest, const void *src, size_t count) { char *ptrDest = static_cast<char*>(dest); const char *ptrSrc = static_cast<const char*>(src); assert(ptrDest != NULL && ptrSrc != NULL); if(ptrDest > ptrSrc && ptrDest < ptrSrc + count) { cout << "overlap case" << endl; for(int i=count - 1; i >=0; i--) ptrDest[i] = ptrSrc[i]; } else for(int i=0; i<count; i++) ptrDest[i] = ptrSrc[i]; return dest; } /*do not handle overlap case*/ void *__memcpy(void *dest, const void *src, size_t count) { char *ptrDest = static_cast<char*>(dest); const char *ptrSrc = static_cast<const char*>(src); assert(ptrDest != NULL && ptrSrc != NULL); assert(ptrDest > ptrSrc + count || ptrSrc > ptrDest + count); for(int i=0; i<count; i++) *ptrDest++ = *ptrSrc++; } int main(int argc, char *argv[]) { char src[MAX] = {'/0'}, dest[MAX] = {'/0'}; cin >> src; //__memcpy_handlOverlap(dest, src, strlen(src)); __memcpy(dest, src, strlen(src)); cout << dest << endl; /*overlap*/ char *overlapDest = src + 2; //__memcpy_handlOverlap(overlapDest, src, strlen(src)); __memcpy(overlapDest, src, strlen(src)); cout << overlapDest << endl; system("PAUSE"); return EXIT_SUCCESS; }