模拟实现strcpy函数
strcpy--字符串拷贝函数
此函数返回目标空间的起始地址
已知 char *strcpy(char *dest, const char *src)
此函数参考源码与所示代码类似,故不再赘述

#include<stdio.h>
#include<assert.h>
char* id_strcpy(char* dest, const char* src)
//加了const可使原数组不被目标数组覆盖(即防止顺序颠倒),const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的
{
    assert(src != NULL);//断言 若为空指针可快速发现
    assert(dest != NULL);
    char* ret = dest;//定义一个指针变量存放目标的地址
    while (*dest++ = *src++)//这样写的巧妙之处在于既可以赋值,又可以使循环停止
    {
        ;
    }
    return ret;
}
int main()
{
    char arr1[] = "#############";
    char arr2[] = "hello";
    函数返回目标数组地址,
    printf("%s", id_strcpy(arr1, arr2));//链式访问
    return 0;
}

模拟实现strlen函数,此函数求字符串长度
//size_t strlen ( const char * str );
参考源码

 size_t __cdecl strlen ( const char * str)
{
const char* eos = str;

while (*eos++);//当*eos!='\0'时,自加,直到*eos='\0',但此时又自加了一次,故eos指向\0后面那个位置

return(eos - str - 1);//指针减指针减去str的基础上再把自加减掉
}

模拟写法 源码

#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)
{
    assert(str);
    int count = 0;
    while (*str != '\0')
    {
        count++;
        str++;
    }
    return count;
}
int main()
{
    char arr[] = "abc";
    printf("%d", my_strlen(arr));
    return 0;
    }