库函数的模拟实现(strcpy)

一、strcpy函数说明

还是老规矩我们来cplusplus看看strcpy的函数说明

从这个说明中我们总结出几个注意事项:

  1. 源字符串必须以'\0'结束。
  2. 会将源字符串中的'\0'拷贝到目标空间
  3. 目标空间必须要足够大,以确保能存放源字符串
  4. 目标空间必须可修改(所以const修饰要慎用)

二、strcpy实现思路

针对函数说明,我们函数的实现思路其实挺简单的

  1. 初始化目标指针:在函数内部,首先需要声明一个指针,通常命名为p或类似的名字,初始化为指向目标字符串的开始位置。

  2. 检查源字符串:使用一个循环来遍历源字符串的每个字符,直到遇到终止的空字符'\0'

  3. 复制字符:在循环中,每次将源字符串的当前字符复制到目标字符串的当前位置,然后将目标指针向前移动一位。

  4. 处理终止字符:当循环结束时,即遇到源字符串的终止空字符,需要将这个空字符复制到目标字符串的相应位置。

  5. 返回目标字符串:函数返回目标字符串的指针。

  6. 函数定义:因为我们要返回的是字符串的指针那么我们的函数定义应该是char * my_strcpy(char * dest,const cahr * src)这里是因为目标空间必须可修改所以char *dest不能用const修饰。

三、strcpy模拟实现

好啦现在根据我们的思路来实现以下吧,代码中提及到的assert和const我在深入探寻指针奥秘中有提到,这里不再赘述啦。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* src) {
    char* p = dest; // 保存目标字符串的起始位置
    assert(dest && src); // 确保目标和源字符串指针不为空
    while ((*dest++ = *src++)) {
        // 循环直到遇到源字符串的终止字符'\0'
    }
    return p; // 返回目标字符串的起始位置
}
int main() {
    char a[] = "abc"; // 使用字符数组而不是指针
    char b[10]; // 目标字符串的存储空间
    my_strcpy(b, a);
    printf("%s\n", b); // 直接打印b,因为b是字符数组,不是指针
    return 0;
}

在函数内部,声明了一个char*类型的指针p,并将其初始化为指向目标字符串的起始位置。

while ((*dest++ = *src++)) { ... }在这个循环中,执行以下操作:

src指向的字符赋值给dest指向的位置。

destsrc都向前移动一位(即指向下一个字符)。

循环继续,直到*src'\0'

当源字符串的终止字符被复制后,函数返回目标字符串的起始位置。

好啦到这里我们到这里我的strcpy函数模拟实现就完成啦,大家自己上手练习一下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值