//废话不讲了 void* my_memmove(void* dest,const void* src,int count) { assert(dest != NULL && src != NULL); char* ret = (char*)dest; if(dest<=src || (char*)dest >= ((char*)src+count)) { while(count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } else { dest = (char*)dest + (count - 1); src = (char*)src + (count -1); while(count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } return ret; } void* my_memcopy(void* dest,void* src,int count) { assert(dest != NULL && src != NULL); char* ret = (char*)dest; //不能重叠 assert(dest >= ((char*)src + count) || src >= ((char*)dest + count)); //复制 while(count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } return ret; } char* my_strcopy(char* dest,const char* src) { assert(dest != NULL || src != NULL); char* ret = dest; while((*dest++ = *src++) != '/0'); return ret; } char* my_strcat(char* dest,const char* src) { char* cp = dest; //移动到字符串结尾 while(*cp) { ++cp; } while(*cp++ = *src++); return dest; } int my_strcmp(const char* str1,const char* str2) { int ret = 0; //在这个循环中字符'/0'启到了作用,它的ASCII值为0 while(!(ret = ((unsigned char)*str1 - (unsigned char)*str2)) && *str2) { ++str1; ++str2; } if(ret > 0) ret = 1; else if(ret < 0) ret = -1; return ret; }