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

【C语言 模拟实现strlen函数的三种方法】

C语言程序设计笔记---022

  • C语言之模拟实现strlen函数
    • 1、介绍strlen函数
    • 2、模拟strlen函数的三种方法
      • 2.1、计数器法模拟实现strlen函数
      • 2.2、递归法模拟实现strlen函数
      • 2.3、指针减指针法模拟实现strlen函数
    • 3、结语

C语言之模拟实现strlen函数

前言:
通过C语言字符串函数的知识,这篇将对strlen函数进行深入学习底层的知识,并模拟实现对应功能。

/知识点汇总/

1、介绍strlen函数

函数原型:size_t strlen( const char string );
函数功能:返回参数的字符串长度
头文件:<string.h>
使用注意事项
(1)、以双引号初始化括起来的字符串自动识别’\0’字符串结束标志位,如“abcdef”本质是“abcdef\0”
(2)、以数组大括号初始化字符元素时,需手动添加‘0’字符串结束标志位,如{‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘\0’}
(3)、strlen函数的参数是char
类型,接收对象是地址;不是类型占内存的大小,不包括’\0’;strlen是不会计算’\0’之后的长度的。
示例代码如下

#include <stdio.h>
#include <string.h>
//使用strlen函数,需要调用头文件 ---- <string.h>
int main()
{char arr[] = "hello";printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'char arr2[] = {'a','b','c','d','e','f','\0'};printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'return 0;
}

2、模拟strlen函数的三种方法

2.1、计数器法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(char* str)
{size_t count = 0;while (*str++ != '\0'){count++;}return count;
}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}

2.2、递归法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(const char* str)
{if (*str == '\0')return 0;elsereturn 1 + my_strlen(str + 1);
}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}

2.3、指针减指针法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(const char* str)
{char* ret = str;while (*str != '\0'){str++;}return str - ret;}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}

3、结语

学习函数的最实用的方式就是用自己的逻辑简单实现一些类似的功能
半亩方糖一鉴开,天光云影共徘徊。
问渠哪得清如许?为有源头活水来。–朱熹(观书有感)

相关文章:

【C语言 模拟实现strlen函数的三种方法】

C语言程序设计笔记---022 C语言之模拟实现strlen函数1、介绍strlen函数2、模拟strlen函数的三种方法2.1、计数器法模拟实现strlen函数2.2、递归法模拟实现strlen函数2.3、指针减指针法模拟实现strlen函数 3、结语 C语言之模拟实现strlen函数 前言&#xff1a; 通过C语言字符串…...

MySQL数据库与表管理《三国志》为例

在数据库管理中,一个典型的应用场景是游戏数据的存储和管理。以经典游戏《三国志》为例,该游戏具有多个角色、任务、装备等元素,如何有效地存储和管理这些数据就成为了一个问题。 本文将通过《三国志》的实例,详细解释如何在MySQL中进行数据库和表的管理。 文章目录 《三国…...

D. Jellyfish and Mex - DP

题面 分析&#xff1a; 题目最终需要达到MEX位0&#xff0c;也就是从最开始的MEX变成0后m的最小值&#xff0c;可以设 d p i dp_i dpi​表示当前MEX为 i i i时&#xff0c;m的最小值&#xff0c;那么就可以根据前一个状态推出后一个状态&#xff0c;也就是假如当前MEX是 i i …...

奥斯卡·王尔德

奥斯卡王尔德 奥斯卡王尔德&#xff08;Oscar Wilde&#xff0c;1854年10月16日—1900年11月30日&#xff09;&#xff0c;出生于爱尔兰都柏林&#xff0c;19世纪英国&#xff08;准确来讲是爱尔兰&#xff0c;但是当时由英国统治&#xff09;最伟大的作家与艺术家之一&#xf…...

IDEA常用快捷键大全

整理了一些IDEA开发常用的快捷键&#xff1a; 快捷键组合实现效果psvm Tab键 / main Tab键public static void main(String[] args)sout Tab键System.out.println()Ctrl X删除当前行Ctrl D复制当前行AltInsert(或右键Generate)生成代码(如get,set方法,构造函数等)CtrlAltT…...

Java之多线程的综合练习二

练习六&#xff1a;多线程统计并求最大值 需求&#xff1a; 在上一题基础上继续完成如下需求&#xff1a; 每次抽的过程中&#xff0c;不打印&#xff0c;抽完时一次性打印(随机) 在此次抽奖过程中&#xff0c;抽奖箱1总共产生了6个奖项。 分别为&#xff1a;10,20,100,50…...

selenium下载安装 -- 使用谷歌驱动碰到的问题

安装教程参考: http://c.biancheng.net/python_spider/selenium.html 1. 谷歌浏览器和谷歌驱动版本要对应(但是最新版本谷歌对应的驱动是没有的,因此要下载谷歌历史其他版本): 谷歌浏览器历史版本下载: https://www.chromedownloads.net/chrome64win/谷歌浏览器驱动下载: http:…...

开放式耳机怎么选择、300之内最好的耳机推荐

开放式耳机凭借不入耳、不伤耳、安全更舒适的佩戴体验&#xff0c;得到了越来越多音乐爱好者和专业人士的青睐。开放式耳机不需要插入耳道&#xff0c;在佩戴时可以更加自然和轻松&#xff0c;减少了长时间佩戴引起的不适感&#xff0c;而且不会完全隔绝外界声音&#xff0c;用…...

git密码提交切换SSH提交

git保存密码 每次登录都要输入密码是显示繁琐&#xff0c;好在git提供了保存密码的功能。 在本地工程文件夹下&#xff0c;.git目录&#xff0c;保存以下配置。 [credential] helper store或者 在git bash命令行&#xff0c;执行命令 git config credential.helper store如…...

数字乡村包括哪些方面?数字乡村应用介绍

数字乡村是指利用物联网、数字化和智能化技术&#xff0c;借助现代数字智能产品、高效信息服务和物联网基础设施&#xff0c;以提高农村居民生活质量&#xff0c;助力拓展经济发展前景。 创建数字村庄有助于缩小城乡社区之间的差距&#xff0c;保障每个人都能平等地享受科技发展…...

弹性资源组件elastic-resource设计(一)-架构

简介 弹性资源组件提供动态资源能力,是分布式系统关键基础设施,分布式datax,分布式索引,事件引擎都需要集群和资源的弹性资源能力,提高伸缩性和作业处理能力。 本文介绍弹性资源组件的设计,包括架构设计和详细设计,指导开发人员代码开发 关键词 作业管理器/资源管理器/…...

C/C++笔试面试真题

C/C++笔试面试真题 1、堆和栈的区别 1、栈由系统自动分配,而堆是人为申请开辟; 2、栈获得的空间较小,而堆获得的空间较大; 3、栈由系统自动分配,速度较快,而堆一般速度比较慢; 4、栈是连续的空间,而堆是不连续的空间。 2、什么是野指针?产生的的原因? 野指针的指向的…...

【Vue3】兄弟组件传参

1. 借助父组件传参 A 组件派发一个事件&#xff0c;修改 flag 的值&#xff0c;先传递给父组件&#xff0c;然后由父组件传递给 B 组件。 缺点&#xff1a;必须由 App.vue 处理中间逻辑。 A.vue <template><div class"A"><h1>A组件</h1>…...

【CSS 中 link 和@import 的区别】

<link> 和 import 都可以用于引入 CSS 文件&#xff0c;但是两者有以下区别&#xff1a; 加载时间&#xff1a;<link> 标签在页面加载时同时加载&#xff0c;而 import 是在页面加载后才开始加载。 兼容性&#xff1a;<link> 标签可以被所有的浏览器正确解释…...

笔记二:odoo搜索、筛选和分组

一、搜索 1、xml代码 <!--搜索和筛选--><record id"view_search_book_message" model"ir.ui.view"><field name"name">book_message</field><field name"model">book_message</field><field…...

Ubuntu Zookeeper开机自启动服务

1、创建service文件 在/lib/systemd/system目录下创建zookeeper.service文件 [Unit] DescriptionApache Zookeeper server Documentationhttp://zookeeper.apache.org Requiresnetwork.target remote-fs.target Afternetwork.target remote-fs.target[Service] Typesimple Env…...

关于Matlab与Python中日期转时间戳不一致的问题

由于 Matlab 中的日期序列号精确到秒&#xff0c;而 Python 的时间戳精确到秒&#xff0c;因此在进行转换时可能会存在精度损失&#xff0c;导致转换结果不完全相同。 将 Python 中的时间戳转换为 Matlab 中的日期序列号&#xff0c;可以使用下方代码进行转换&#xff1a; de…...

【Django 笔记】第一个demo

1. pip 安装 2. django 指令 D:\software\python3\anconda3\Lib\site-packages\django\bin>django-adminType django-admin help <subcommand> for help on a specific subcommand.Available subcommands:[django]checkcompilemessagescreatecachetabledbshelldiff…...

算法通过村第十一关-位运算|白银笔记|高频题目

文章目录 前言1. 位移的妙用1.1 位1的个数1.2 比特位计算1.3 颠倒无符号整数 2. 位实现加减乘除专题2.1 位运算实现加法2.2 递归乘法 总结 前言 提示&#xff1a;他不是不想多明白些&#xff0c;但是每每在该用脑子的时候&#xff0c;他用了感情。 --老舍《黑白李》 与位运算和…...

04、EL和JSTL核心技术

目录 1 EL表达式&#xff08;熟悉&#xff09; 1.1 基本概念 1.2 主要功能 1.3 访问内置对象的数据 1.3.1访问方式 1.3.2 执行流程 1.4 访问请求参数的数据 1.5 访问Bean对象的属性 1.5.1 访问方式 1.5.2 主要区别 1.6 访问集合中的数据 1.7 常用的内置对象 …...

西门子S7-300/400跨网段数据交换:DP/DP Coupler模块的Step7组态避坑指南

西门子S7-300/400跨网段数据交换实战&#xff1a;DP/DP Coupler组态深度解析与故障排查 在工业自动化系统中&#xff0c;多套PLC之间的数据交互是常见需求。当这些PLC分布在不同Profibus-DP网络时&#xff0c;西门子DP/DP Coupler模块成为实现跨网段通讯的关键组件。然而&#…...

基于GitHub Actions打造自动化工作流:测试、构建、部署

从手工到自动化的测试交付变革在软件研发流程中&#xff0c;测试从来不是孤立环节。每一次代码提交&#xff0c;都可能触发一轮新的构建、部署与验证。传统模式下&#xff0c;测试人员往往需要等待开发手动打包、手动部署到测试环境&#xff0c;再通过人工触发或定时执行测试脚…...

SpringBoot微服务启动遇阻:RedisTemplate Bean缺失的排查与修复指南

1. 问题现象与初步分析 最近在调整SpringBoot微服务项目的Redis配置后&#xff0c;启动时突然遇到一个让人头疼的错误提示&#xff1a; Consider defining a bean of type org.springframework.data.redis.core.RedisTemplate in your configuration.这个错误表面看是Spring容器…...

想让你的Linux终端也下起‘代码雨’?手把手教你安装配置cmatrix屏保(CentOS/Ubuntu双系统保姆级教程)

让你的Linux终端下起"代码雨"&#xff1a;cmatrix屏保终极玩法指南 第一次在《黑客帝国》里看到绿色字符如瀑布般倾泻而下的场景时&#xff0c;那种科技感与未来感是否让你心驰神往&#xff1f;现在&#xff0c;你完全可以在自己的Linux终端里复刻这一经典画面。cmat…...

如何打造Koel音乐流的终极插件生态:从开发到分发的完整指南

如何打造Koel音乐流的终极插件生态&#xff1a;从开发到分发的完整指南 【免费下载链接】koel Music streaming solution that works. 项目地址: https://gitcode.com/gh_mirrors/ko/koel Koel是一款功能强大的音乐流媒体解决方案&#xff0c;通过其灵活的扩展机制&…...

Godot引擎开发实战:高效利用代码食谱仓库加速游戏原型设计

1. 项目概述&#xff1a;一个为Godot开发者量身定制的“食谱”仓库如果你正在使用Godot引擎&#xff0c;无论是刚入门的新手&#xff0c;还是已经摸爬滚打了一段时间的开发者&#xff0c;大概率都经历过这样的时刻&#xff1a;脑子里有一个很酷的游戏机制想法&#xff0c;比如“…...

19 - 语言模型为何是AGI的开端?——从“知识压缩”到“智能涌现”的第一性原理

本专题系列文章共 21 篇,前 5 篇限时免费阅读 01 - 眩晕时代的定海神针:大模型落地的“第一性原理”与算力丰裕悖论 02 - 95%的AI投资打了水漂:五大错配如何扼杀你的“第二增长曲线” 03 - 从电力到AI:标准化已死,个性化永生——大模型时代的三大商业终局 04 - 你的护城…...

3步快速上手RobotHelper:安卓自动化脚本框架新手指南

3步快速上手RobotHelper&#xff1a;安卓自动化脚本框架新手指南 【免费下载链接】RobotHelper 安卓游戏自动化脚本框架|Automated script for Android games 项目地址: https://gitcode.com/gh_mirrors/ro/RobotHelper 你是否想要开发安卓游戏自动化脚本&#xff0c;却…...

基于Twilio与ChatGPT构建AI电话助手:架构设计与实战指南

1. 项目概述&#xff1a;当ChatGPT遇上实体电话最近在折腾一个挺有意思的玩意儿&#xff0c;叫“ChatGPT-phone”。这名字听起来有点科幻&#xff0c;但说白了&#xff0c;它的核心目标就是让一个AI语音助手&#xff0c;比如ChatGPT&#xff0c;能够像真人一样接听和拨打电话。…...

AI智能体开发工具栈全解析:从框架、可观测性到部署实战指南

1. 项目概述与核心价值如果你正在构建AI智能体应用&#xff0c;并且已经厌倦了在GitHub、Twitter和各种技术论坛里大海捞针般地寻找合适的开发工具&#xff0c;那么你很可能已经遇到了一个共同的痛点&#xff1a;生态碎片化。从让大语言模型&#xff08;LLM&#xff09;具备“记…...