【手写系列】手写strcpy、memcpy、strcat函数

Posted on 2018-01-28 01:09  Unkn0wnnnnn  阅读(749)  评论(0)    收藏  举报

手写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;

}