模拟strcpy函数的实现

前言

strcpy函数在整个c语言中,是一个初学者的必经之路,那么本期将带来strcpy的使用详解,后面一期是strlen的详解,如果喜欢的话请点个关注和赞吧


我们在这个cplusplus中可知,这个strcpy函数是一个拷贝字符串的功能,并且拥有返回值

举例:

strcpy(想拷贝的函数,被拷贝的函数)

这么说不够透彻我们直接上代码

#include<string.h>
int main()
{
    char arr1[20] = { 0 };
    char arr2[] = "hello world";
    strcpy(arr1, arr2);
    printf("%s", arr1);
    return 0;
}

在这个拷贝的过程中我们可以知道‘\0’是可以被拷贝的

以上只是最基础的一个方法,但是这种方法明显是不完善的,下面我们来个进阶版的


进阶:

#include <stdio.h>
#include <assert.h>

void my_strcpy(char* dest, char* src)   
{
    assert(src != NULL && dest != NULL);
    while (*dest++ = *src++)
    {
        ;
    }
}

int main()
{
    char arr1[20] = { 0 };
    char arr2[] = "hello world";
    my_strcpy(arr1, arr2);
    printf("%s", arr1);
    return 0;
}

我们在进阶里面会发现出现了“断言”,目的就是为了防止为空指针,而用到了断言

如果传过来为空指针,这里编译器就会自动报错,我们就很快的找到了错误


终极版:

#include<stdio.h>
#include<assert.h>


char* my_strcpy(char* dest,const char* src)
{
    assert(dest && src);//断言
    char* ret = dest;
    while (*dest++ = *src++)
    {
        ;
    }
    return ret;
}

int main()
{
    char arr1[20] = {0};
    char arr2[] = "hello world";
    my_strcpy(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}

在这里我们在*src前加了const,这个const主要是”锁住“的意思,假如我们src和dest在编译的过程中写反了,我们用了const这个函数,编译器会自动报错


const函数:

在这里我们要说明一下,const char* src 和 char const* src 的表达是一个意思

const 放在*左边,*p不可以改变,p可以改变(放在右边就恰恰相反了)


以上就是我们今天的讲解,如果喜欢的话请三连支持一下,您的支持就是我最大的动力!!!

猜你喜欢

转载自blog.csdn.net/m0_74459304/article/details/129023510