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. 0x61 图论-最短路

    B题 Telephone Lines https://ac.nowcoder.com/acm/contest/1055/B 中文题面:https://www.luogu.com.cn/problem/ ...

  2. L1-048 矩阵A乘以B (15分)

    给定两个矩阵A和B,要求你计算它们的乘积矩阵 \(AB\).需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有 \(R_a\) 行.\(C_a\) 列,B有 \(R_b\) 行.\(C_b\) 列, ...

  3. shell脚本(4)-格式化输入

    一.read命令 1.概念: 默认接受键盘的输入,回车符代表输入结束 2.read命令选项 -p:打印信息 -t:限定时间 -s:不回显 -n:输入字符个数 3.举例说明 (1)模拟登录 [root@ ...

  4. Linux环境下如何查看Python版本号

    方法一.直接执行命令python,就可以查看python的版本信息. 退出用exit() 方法二.利用命令python -V,注意V要大写. 方法三.利用命令whereis python,注意wher ...

  5. 大四上 | 计算机综合课设(OS)· 答辩经验帖

    课设代码 repo 被问了如下问题: 我们的 OS 中是否有 idle 进程. 背景:如果所有进程都被 kill 掉了,那么 os 就会陷入死循环.即使再发生需要响应的事情,比如希望再创建个进程 或者 ...

  6. 【SI】source insight4 添加指定类型的文件

    Options->File Type Options 红框可选择是否将指定类型的文件添加到工程 绿框可添加自定义文件类型,如汇编*.s;*.S 蓝框可新增文件类别,用于自定义文件类型 如不需将t ...

  7. JS - 兼容到 IE 8

    使用 jQuery可以有效的兼容IE 浏览器 , 但jQuery从2.0开始不兼容IE8,最低支持IE9,所以需要引入更低的jQuery版本来兼容 <script type="text ...

  8. CSS - 怎么样在不同分辨率的情况下计算根元素需要的font-size的值

    一般我们做页面,肯定都会有设计图,移动端页面,一般情况下,UI出图都会定宽为640px,这也是移动端的标准尺寸:但是,我们也不能排除可能有其他特殊的情况可能需要做其他大小的设计图.所以,我们可以先定一 ...

  9. [转帖]学习如何编写 Shell 脚本(进阶篇)

    https://juejin.cn/post/6935365727205457928 前言 在<学习如何编写 Shell 脚本(基础篇)>一文中已经讲解了 Shell 脚本编程的基础知识, ...

  10. [转帖]Web技术(五):HTTP/2 是如何解决HTTP/1.1 性能瓶颈的?

    文章目录 一.HTTP/2 概览 二.HTTP/2 协议原理 2.1 Binary frame layer 2.1.1 DATA帧定义 2.1.2 HEADERS帧定义 2.2 Streams and ...