手写strcpy的函数的整体思想其实比较简单,一次遍历字符串进行复制就好,源码如下:
char *mystrcpy(char *str1,const char *DesStr){ assert(str1!=NULL); assert(DesStr!=NULL); char *p=str1; while((*str1++=*DesStr++)!='\0'); return p; }
对于strcat函数也仅仅是指针位置移动到字符串'\0'位置的前一位后,再次进行一个类似于字符串复制的操作即可,具体源码如下:
char *mystrcat(char *str1,const char *str2){ assert(str1!=NULL); assert(str2!=NULL); char *p=str1; while(*str1!='\0'){ str1++; } while ((*str1++=*str2++)!='\0'); return p;
而对于memcpy函数则需要额外考虑两个字符串有一个地址重叠的情况。具体实现源码如下:
char *mymemcpy(char* DestStr,char*str2,int count){ if (DestStr==NULL||str2==NULL) return NULL; bool flag1=(DestStr>=str2&&DestStr<str2+count); bool flag2=(str2>=DestStr&&str2<DestStr+count); if (flag1||flag2){ while(count--){ *(DestStr+count-1)=*(str2+count-1); } } else{ while(count--){ *DestStr++=*str2++; } } return DestStr; }
浙公网安备 33010602011771号