strcpy的实现
1. char *strcpy(char *strDest, const char *strSrc) 2. { 3. assert((strDest!=NULL) && (strSrc !=NULL)); 4. char *address = strDest; 5. while( (*strDest++ = * strSrc++) != '\0' ) 6. NULL; 7. return address; 8. }
strcat的实现
1. char* strcat(char *str1,char *str2) 2. { 3. asser((str!=NULL) && (str2!=NULL)); 4. char* tempt = str1; 5. 6. while(*str1++!='\0') 7. 8. while(*str2!='\0') 9. { 10. *str1++ = *str2++; 11. } 12. *str1 = '\0'; 13. 14. return tempt; 15. }
strcmp的实现
1. int strcmp(const char* str1, const char* str2) 2. { 3. assert((str1 != NULL) && (str2 != NULL); 4. int ret = 0; 5. while (!(ret = (unsigned char*)*str1 - (unsigned char*)*str2) && (*str2)) 6. { 7. str1++; 8. str2++; 9. } 10. if(ret > 0) 11. { 12. return 1; 13. } 14. else if (ret < 0) 15. { 16. return -1 17. } 18. 19. return 0; 20. }
memcpy的实现
1. void* memcpy(void *dest , const void* src , size_t count) 2. { 3. assert( (dest != NULL) && (src != NULL)); //安全检查 4. assert(count > 0); 5. char* psrc = (char *)src; 6. char* pdest = (char *)dest; 7. while(count--) 8. { 9. *pdest++ = *psrc++; 10. } 11. return dest; 12. }
这里的memcpy有两个问题
1.按char类型copy,效率太低,想想是否按指针类型别的方式拷贝(考虑内存对齐的问题)
2.没有考虑dest与src地址有重叠的问题
现在没时间,后面有时间再改进!!!!