ChanneyG 2023-05-13 10:10 采纳率: 100%
浏览 38
已结题

关于模拟实现strcat函数的问题!(语言-c语言)

请问这个模拟实现strcat函数中为啥结果是hello而不是hello world,哪里出错了


char* my_strcat(char* dest, char* src)
{
    char* ret = dest;

    assert(dest && src);
    while (*dest++)
    {
        ;
    }
    
    while (*dest++=*src++)
    {
        ;
    }
    
    return ret;
}
int main()
{
    char arr1[20] = "hello ";
    char arr2[] = "world";
    my_strcat(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 关注

    这个循环条件会将指针增加到目标字符串的末尾,但它也会多增加一次,使其指向字符串末尾的空字符。然后,在下一个循环中,源字符串将从空字符开始复制到目标字符串中,从而覆盖它。

    while (*dest)
    {
        dest++;
    }
    
    

    验证:

    #include <stdio.h>
    #include <assert.h>
    #include <string.h>//src是要被追加的  不能变所以加const1
    char *my_strcat(char *dest,const char* src){
        assert(dest!=NULL);//两种写法都可以
        assert(src);//加NULL更有体现
        //1.找到目的字符串\0位置
        char *ret=dest;
        while(*dest!='\0'){
            dest++;
        }
        
        
        //2.追加   
        while(*dest++=*src++){
            ;
        }return ret;
        
    }
    
    int main(){
        
        char arr1[]="hello";
        char arr2[]="world";
        
        my_strcat(arr1,arr2);
        printf("%s\n",arr1);}
        /*
        //遇到\0结束
        char arr1[]="hello";
        char arr2[]="wo\0    rld";
        
        strcat(arr1,arr2);
        printf("%s",arr1);
    }*/
    
    
    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月13日
  • 专家已采纳回答 7月5日
  • 创建了问题 5月13日