strcpy函数;memcpy函数;memmove函数
strcpy函数实现:
char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) && (source != NULL)); while((*des++ = *source++)!='\0') ; //do nothing. return r; }
memcpy函数实现:
void* memcpy(void* dst,const void*src,size_t count) { void*ret=dst; while(count--){ *(char *)dst = *(char *)src; dst = (char *)dst+1; src = (char *)src+1; } return ret; }
考虑重叠情况的话,这样实现好点:
char *my_memcpy(char *dst, const char* src, int cnt) { assert(dst != NULL && src != NULL); char *ret = dst; if (dst >= src && dst <= src+cnt-1) //des在右的内存重叠,从高地址开始复制 { dst = dst+cnt-1; src = src+cnt-1; while (cnt--) *dst-- = *src--; } else //正常情况,从低地址开始复制 { while (cnt--) *dst++ = *src++; } return ret; }
memmove函数实现:
void *mymemmove(void *dest, const void *src, size_t n) { char temp[n]; int i; char *d = dest; const char *s = src; for (i = 0; i < n; i++) temp[i] = s[i]; for (i = 0; i < n; i++) d[i] = temp[i]; return dest; }
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】