C语言程序编程模拟实现strlen函数和strcpy函数(超详细的注释和解释)

求个赞求个赞求个赞求个赞 谢谢


先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注我哦!️️️
前言:作者:Yu
常用c程序编译器:vs2019**
**

用c程序编程实现strlen函数和strcpy函数是代码新人对指针基础理解和运用的一个好方法,通过用代码实现strlen和strcpy函数可以很好地帮助我们在刚接触c代码时巩固我们自身对代码的理解和提高写代码的能力

库函数里面的strlen函数:

strlen函数原型:size_t strlen ( const char * str );
通过该函数的返回值我们能直接字符串的长度
*1.size_t代表该函数返回值是一个无符号整型
2.const charstr 代表该函数的参数是一个不可改变的字符串的地址.

strlen函数的运用:

#include<stdio.h>
#include<string.h>//使用strlen函数我们需要引用该头文件
int main()
{
char ch[20] = "abcdef";//定义一个字符串,并初始化
int ret=strlen(ch);//将strlen函数的返回值赋给ret
printf("%d\n", ret);//打印结果
return 0;
}

//输出的结果是:6
//或者我们可以使用gets函数来输入自己想要的字符

代码模拟实现strlen函数:

我们知道,字符串的结尾都有一个’\0’,这个就是字符串结尾的标志。
那我们的思路就是,定义一个count变量来统计字符串长度,我们一个一个字符往后找,如果找到的字符不是’\0’那我们的count++一下,到最后,count的数就是我们所求的字符串长度啦!
上代码:

//strlen函数是通过找'\0'来判断字符串长度的
size_t my_strlen(char* str)//我们的函数返回类型是size_t,也就是无符号整型
{
int count = 0;//定义一个count来计算我们的字符串长度
while (*str != '\0')//循环走起来,如果我们找到的字符不是'\0',count++一下,str++一下,找下一个
{
str++;
count++;
}
return count;
}
int main()
{
char ch[20] = "abcdef";
int ret = my_strlen(ch);//将my_strlen函数的返回值赋给ret
printf("%d\n", ret);
return 0;
}

在这里我们有用到指针的一些基础知识
一开始,我们是定义了一个数组ch,它的类型是char,里面放着我们的字符串,
我们写一个函数my_strlen来求这个长度的时候
我们要传参给我的函数
一维数组传参,传过去的是首元素的地址,因此,我们函数接收参数的时候,要写成char* 类型
(注意,charstr里面的和后面str里面的的意义是不同的哦,暂时不明白的伙伴可以私信我)
那么,我们的循环条件就是,str指向的字符如果不是’\0’,我们就要让str++一下,判断下一个
当我们找到’\0’的时候我们就可以跳出循环了,最后我们函数返回count即可得到我们的字符串长度。
(关于不知道const是什么意思的伙伴,可以给我留言哦)

以上这个模拟代码还可以进行优化:例如将循环条件直接改成(*str++)也是可以的!这样后面就不用写str++了。

如果对以上解释还有疑问的伙伴可以给我留言哦

库函数里面的strcpy函数

strcpy函数原型char * strcpy ( char * destination, const char * source );
strcpy函数可以帮助我们把一个字符串的内容拷贝到另一个字符串上。话不多说我们上代码:
strcpy函数的运用

int main()
{
char arr1[20] = "xxxxxxxxxxxx";
char arr2[] = "hello bro";
strcpy_s(arr1, arr2);
printf("%s\n", arr1);
}

输出结果
我们看到,我们已经成功将arr2里面的内容拷贝到了arr1里面了。

代码模拟strcpy函数

同样,与上面strlen的模拟一样,我们也要用到函数传参等知识
思路:arr2的第一个元素赋给arr1的第一个元素
arr2的第二个元素赋给arr2的第二个元素…

        直到我们找到了arr2的'\0',说明我们的复制已经完成了
此处要注意,我们的'\0'也是要拷贝过去的
为什么:因为字符串以'\0'结尾,如果不拷贝'\0'过去,我们输出的结果就会编程hello broxxxxx...直到找到'\0'为止。
因此,我们上代码:
void my_strcpy(char* dest, char* src)
//dest代表拷贝的目的地,src代表拷贝的来源
{
while (*src != '\0')//同样的,循环走起来 {
*dest = *src;//把来源拷贝到目的地去
dest++;//拷贝完一个拷贝下一个
src++;
}
*dest = *src;//因为当遇到'\0'之后就会跳出循环
//此处我们要把'\0'也拷贝过去
}
int main()
{
char arr1[20] = "xxxxxxxxx";
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}

这样,我们的strcpy函数就模拟好了
当然,我们的函数部分还可以继续优化

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

这个就是优化后的函数部分的版本,这样写更简单,在这里就不解释啦!


以上就是这期博客的所有内容啦,希望看完的你可以在从中学到一些东西,走之前别忘记了点赞和关注哦!!!


【算法】C语言程序编程模拟实现strlen函数和strcpy函数的更多相关文章

  1. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数

    strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...

  2. Go语言网络编程: 模拟实现DNS服务器

    环境: 两台虚拟机,不限系统 写在前面 DNS服务器是干什么的?DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器,保存了一张域名和与之相 ...

  3. 【C语言/C++编程学习笔记】你的第一个Windows程序!高级操作~

    什么是windows编程?了解到Windows API 编程.Windows编程.Windows SDK 编程是一个概念.今天我们运用C语言来实现你的第一个真正的Windows程序. windows. ...

  4. 【C语言C++编程学习笔记】基础语法,第一个简单的实例编程入门教程!

    C语言/C++编程学习:一个简单的实例 让我们来看一个简单的C语言程序.从下面的程序可以看出编写C语言程序的一些基本特征.   如果你能知道该程序将会在显示器上显示一些内容,那说明你还是知道一些的! ...

  5. strcpy函数导致release版程序崩溃

    最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...

  6. C语言::模拟实现strlen函数

    题目要求 编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0 ...

  7. Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结

    前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...

  8. 【编程学习笔记】如何组织构建多文件 C 语言程序!编程也有~

    优秀 Unix 程序哲学 首先,你要知道这个 C 程序是一个 Unix 命令行工具.这意味着它运行在(或者可被移植到)那些提供 Unix C 运行环境的操作系统中.当贝尔实验室发明 Unix 后,它从 ...

  9. C语言编程入门之--第三章编写第一个C语言程序

    第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...

  10. 计算机网络|C语言Socket编程,实现两个程序间的通信

    C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图

随机推荐

  1. L2-030 冰岛人 (25 分) (阅读理解)

    补题链接:Here 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普如下: 冰岛人沿用的是维京人古 ...

  2. InnoDB 事务加锁分析

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/S7MhlsZveBHRSQhq5aTIJA作者:何志创 一般大家对数据库事务的了解可能停留在事 ...

  3. 二、java发送https的各类请求

    导航 一.java发送http的各类请求 二.java发送https的各类请求 java开发中需要调用其他服务的对外提供的https请求,上一篇写的是调用http,处理方式不太一样,可以参考如下代码: ...

  4. linux ntp时间服务器搭建

    工作中经验遇到搭建时间服务器的任务,如何搭建网上找的例子总是有些许问题,如下自己动手操作一遍总结一下,方便自己和后来人直接上手使用. 准备工作:192.168.0.1   服务端: ntp服务器192 ...

  5. vue学习笔记 十四、页面跳转

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  6. el-table 暂无数据自定义

  7. hybird介绍

    什么是hybird? hybrid即"混合",即前端和客户端的混合开发,需要前端开发人员和客户端开发人员配合完成. hybrid存在价值 可以快速迭代更新(无需app审核,思考为何 ...

  8. I/O多路复用与socket

    前言 简单来讲I/O多路复用就是用一个进程来监听多个文件描述符(fd),我们将监听的fd通过系统调用注册到内核中,如果有一个或多个fd可读或可写,内核会通知应用程序来对这些fd做读写操作,select ...

  9. Go 标准库 net

    本篇文章主要介绍 Go 标准库中的 net 包,通过一个小例子介绍常用的 net 包函数/方法 Listen,Accept 和 Dial 等. 1. net 简介 Go 官网对 net 包的定义如下: ...

  10. 基于python+django的家教预约网站-家教信息管理系统设计与实现

    该系统是基于python+django开发的家教预约网站.是给师妹做的课程作业.大家在学习过程中,遇到问题可以在github给作者留言. 效果演示 前台地址: http://jiajiao.gitap ...