char *strncpy(char *dest, const char *src, size_t count); char *strcpy(char *dest, const char *src) { if((dest == NULL) || (src == NULL)) { return NULL; } char *strDest = dest; while(*src != '\0') { *strDest++ = *src++; } return strDest; } void *memmove(void *dest, const void *src, size_t count); void *memcpy(void *dest, const void *src, size_t count) { //assert(dest != NULL); //assert(src != NULL); if((dest == NULL) || (src == NULL)) { return NULL; } char *tmpDest = (char *)dest; const char *tmpSrc = (const char *)src; //判断是否内存有重叠 //assert(!(tmpDest < tmpSrc) && ((tmpDest + count) > tmpSrc)); if((tmpDest < tmpSrc) && ((tmpDest + count) > tmpSrc)) { return NULL; } //assert(!(tmpSrc < tmpDest) && (tmpSrc + count) > tmpDest)); if((tmpSrc < tmpDest) && (tmpSrc + count) > tmpDest)) { return NULL; } while(count--) { *tmpDest++ = *tmpSrc++; } }