C语言 - 教你怎么拥有属于自己的strcpy函数

发布于:2022-08-10 ⋅ 阅读:(266) ⋅ 点赞:(0)

文章目录


一、前言

        首先,我们想要写出自己的strcpy函数,那必须先了解库中的strlen函数是实现原理。

        在此我们可以看到strcpy的函数声明,返回值类型为char * ,由两个形参组成。

        destination - 指针指向的目标数组。

        source - 复制的字符来源。

        根据说明我们可以得知,strcpy函数是将 source 指向的字符串复制到 destination 指向的数组中,也包括 ' \0 '(并停到这里)

        所以,根据以上两点,我们可以轻易的写出我们的自己的MyStrcpy函数


一、注意事项

        在使用函数进行复制字符串时,数组的大小应该确保有足够大的空间存储新的元素,否则会出现越界访问

二、代码实现

方法一、交换法:

void MyStrcpy(char *dest, char *src)
{
    while (*src != '\0')
    {
        *dest = *src;
        *dest++;
        *src++;
    }
    *dest = *src;
}

方法一:代码详解

        1、新建两个变量,dest指向目标数组,src指向字符来源数组

        2、循环判断 src 不等于 ' \0 ' ,条件为真时,直接将 dest 按顺序替换成 src 的字符

        3、当 src 等于 ' \0 ' 时,循环则停止,此时 src 指向 ' \0 ' 的位置

        4、但是 ' \0 ' 并不会拷贝进去,所以需要我们再添加一句,将 ' \0 '拷贝进去

方法二、交换法优化:

void MyStrcpy(char *dest, char *src)
{
    while (*src != '\0')
    {
        *dest++ = *src++;
    }
    *dest = *src;
}

方法二:代码详解

        1、由方法一改进而来,基本原理不变

        2、由于使用的是后置++,所以是先解引用拷贝过去,再++

方法三、表达式优化:

void MyStrcpy(char *dest, char *src)
{
    while (*dest++ = *src++)
    {
        ;
    }
}

方法三:代码详解

        1、利用表达式,先赋值再判断

        2、配合着后置++,先解引用拷贝,在++

        3、当指向 ' \0 ' 时,将 ' \0 '先拷贝过去,然后再判断(' \0 ' 的ASCII码为0,所以条件为假,如果数组中存在0,则这个0为字符0,其ASCII码为48,条件为真)


三、总结

文中使用了三种方法模拟strcpy函数,如果如有错漏之处,敬请指正。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到