• 模拟实现库函数:strcpy


    模拟实现库函数:strcpy!

    笔者不才!最近斗胆创建了一个名为C语言大家庭的公众号,里面记录了笔者之前的CSDN文章,感兴趣的读者请添加关注哦!

    最近刚刚开始起步,急剧寻找合作伙伴!有意者请一步微信公众号私聊

    对于库函数,想必大家已经有所了解!但是对于某些误撞进入此篇博客的读者,笔者在此进行简单的介绍!

    “strcpy是字符串复制函数,strcpy(a,b)就是将字符串b的内容全部复制到字符串a中,使用这个函数时要注意字符串拥有的空间至少要和b字符串相等,否则会出错。”

    笔者所写的简单代码为:

    1. //库函数strcpy的实现情况!
    2. #include <stdio.h>
    3. #include <string.h>
    4. int main()
    5. {
    6. char arr1[20] = "***************";
    7. char arr2[] = "hello";
    8. strcpy(arr1, arr2);
    9. printf("%s\n", arr1);
    10. return 0;
    11. }

    在这段代码中,形象的诠释了strcpy()库函数的简单应用!

    下面是代码的运行结果!

     经过上面的简单讲解,想必大家对于库函数strlen()有着深刻的了解,并且能自我找到规律了!下面请看笔者对于如何用代码来模拟库函数strlen()的实现!

    用代码来模拟库函数strlen()的实现!

    下面请看笔者的简单代码,然后笔者将会通过代码加解析的方式来带领大家走进神秘的库函数!

    1. //模拟库函数strlen()的实现!
    2. #include <stdio.h>
    3. void my_str(char* arr1, char* arr2)
    4. {
    5. while (*arr2 != '\0')
    6. {
    7. *arr1 = *arr2;
    8. arr1++;
    9. arr2++;
    10. }
    11. *arr1 = *arr2; //拷贝‘\0
    12. }
    13. int main()
    14. {
    15. char arr1[20] = "****************";
    16. char arr2[] = "hello";
    17. my_str(arr1, arr2);
    18. printf("%s\n", arr1);
    19. return 0;
    20. }

    在上述的代码段中,最为重要的部分还是在于:while()的拷贝循环里面!

    对于在main函数中,通过:my_str(arr1, arr2);  将数组  char arr1[20] = "****************";    char arr2[] = "hello";  传递给形参,而数组名是数组首元素地址!对于地址,形参要用指针来接收,,返回类型为:void(空类型)!因此经函数部分定义为:void my_str(char* arr1, char* arr2)!

    对于在函数体部分:while ()循环,对于()里面的内容一直循环判断,直到: *arr2 == '\0'     时候,条件不成立,结束while ()循环!

    在while ()循环里面:

    1. *arr1 = *arr2;
    2. arr1++;
    3. arr2++;

    将地址进行解引用操作后,进行赋值运算!从而将*arr2全部赋值给*arr1; 然后在arr1++;   arr2++;

    一直到  : *arr2 == '\0'    为止!然后在执行一次:*arr1 = *arr2;  这个的目的主要在于还是要拷贝'\0'  ! 然后才能算术完全实现库函数strlen()的功能!

    代码的最后运行结果为:

     对于函数体部分的代码,不同的人有着不同的见解,其实也可以写成:

    1. void my_str(char* arr1, char* arr2)
    2. {
    3. while (*arr1++ = *arr2++)
    4. {
    5. ;
    6. }
    7. }

    这样书写代码的最后结果也是一样的!

    最后的运转结果为:

     对于上述模拟库函数strlen()的实现已经到此为止!

    最后笔者一丢丢小私心!(在文章开头部分)望满足!

  • 相关阅读:
    Ribbon 服务调用与负载均衡
    Java跳过证书访问HTTPS
    Docker安装Elasticsearch、Kibana
    基础复习——内容共享——通过ContentProvider封装数据——通过ContentResolver访问数据...
    1、什么是NFT
    ESP32 之 ESP-IDF 教学(十七)——组件依赖
    蓝桥杯第一天
    docker出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock....
    2024新算法爱情进化算法(LEA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验
    该选择什么行情时做上证50ETF期权?
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126389048