当前位置: 首页 > news >正文

strlen函数模拟实现——深入理解指针(3)

eec91d6c25234e4a8657fe54a1c5057c.png

目录:

1.1strlen函数模拟实现


现在回想一下 strlen 函数的功能

strlen函数是一种专门用来测量字符串长度的函数,比如:

f245abf015a24718b1261a56c3d1d92c.png

使用 strlen函数 就需要使用 <string.h> 的头文件,strlen函数可以测量 '\0' 之前的字符个数

如果没有 '\0' ,strlen在测量字符串个数时就会返回随机值

但今天的重点不是 strlen 函数的使用,而是strlen 函数的模拟实现

我们知道,strlen函数会测量字符串的个数,直到'\0'结束


那么想要实现模拟strlen函数,如上图:我们可以做一个函数,传入数组的首地址,也就是字符串的首地址。

随着地址的不断增加,我们可以不断计数,直到 '\0' 停止计数,最终返回模拟strlen函数中计数的总数

我们可以自定义一个函数my_strlen,并这样实现:

d80a5b12d7de4344abc832b898bd9976.png

备注:数组名(arr)表示首元素地址(下一章讲)

随着地址的不断增加,计数器count也一直增加,直到 '\0' 停止,最后返回计数器的总数

那么,有没有更简单的方法呢?


我们昨天讲到,指针-指针返回的数的绝对值是两个地址之间元素的个数

如果我们直接用字符串末地址 - 字符串首地址,不就可以得到字符串的个数了

那么,字符串的首地址很容易找到,我们该如何找到字符串的末地址呢?

我们可以将首地址一直进行增加,直到'\0'就停止地址的增加,就可以找到字符串的末地址了

比如:

4e5dd28e730e46aba74f58fffbd22170.png

这样就输出了字符串的元素个数,但是因为指针-指针得到的数的绝对值,是两个指针之前的元素个数,所以输出为-7

如果想通过这样的方式输出7,那就用 末位置-起始位置 即可,比如:

1ad158109c53413688e8bf793ae00101.png

0a751dbde74d441b840b954af6f826f4.png

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于x86 平台opencv的图像采集和seetaface6的眼睛状态检测(睁眼,闭眼)功能
  • Linux开发环境搭建,虚拟机安装
  • Linux安装使用Apache(Windows下载,离线安装)
  • 构建第一个zk
  • MVSEP-MDX23容器构建详细教程
  • windows中使用vscode的remote-ssh连接linux失败
  • vue组件和插件使用
  • 网络安全场景化解决方案编写教程(大纲)
  • day42 代码随想录 | 子序列问题 面试高频题
  • 漏洞挖掘 | 记一次Spring横向渗透
  • 小程序wx:if 和hidden的区别
  • leetcode 3146 两个字符串的排列差
  • QStackedWidget使用整理
  • 力扣刷题(复习版)
  • 7-2 求矩阵的最大值(设惟一)
  • Akka系列(七):Actor持久化之Akka persistence
  • create-react-app做的留言板
  • CSS3 变换
  • extjs4学习之配置
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java 23种设计模式 之单例模式 7种实现方式
  • jQuery(一)
  • spring cloud gateway 源码解析(4)跨域问题处理
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue2 SSR 的优化之旅
  • Vue组件定义
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 官方解决所有 npm 全局安装权限问题
  • 基于 Babel 的 npm 包最小化设置
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 每天一个设计模式之命令模式
  • 如何合理的规划jvm性能调优
  • 设计模式 开闭原则
  • 一个项目push到多个远程Git仓库
  • 一天一个设计模式之JS实现——适配器模式
  • 译自由幺半群
  • 用简单代码看卷积组块发展
  • 第二十章:异步和文件I/O.(二十三)
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​如何防止网络攻击?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #QT(串口助手-界面)
  • (003)SlickEdit Unity的补全
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Oracle)SQL优化技巧(一):分页查询
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)fock函数详解
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net 8.0 新的变化