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

模拟实现C语言--strlen函数

模拟实现C语言–strlen函数

  • 模拟实现C语言--strlen函数
  • 一、strlen函数是什么?
  • 二、strlen函数的模拟实现
    • 2.1 计数器方式实现strlen函数
    • 2.2 不创建临时变量计数器方式实现strlen函数
    • 2.3 指针-指针方式实现strlen函数
  • 三、strlen函数的返回类型


一、strlen函数是什么?

strlen函数是用于计算字符串长度的库函数

size_t strlen ( const char * str );

在这里插入图片描述

  1. 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
  2. 参数指向的字符串必须要以 ‘\0’ 结束。
  3. 注意函数的返回值为size_t,是无符号的( 易错 )

二、strlen函数的模拟实现

2.1 计数器方式实现strlen函数

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

在这里插入图片描述

2.2 不创建临时变量计数器方式实现strlen函数

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

2.3 指针-指针方式实现strlen函数

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

三、strlen函数的返回类型

size_t strlen ( const char * str );

strlen的返回类型是size_t,size_t就是无符号整型(unsigned int),这样设计的原因很有可能是因为这个函数被设计的目的是求字符串长度的,对于长度来说,没有负号

http://www.lryc.cn/news/166450.html

相关文章:

  • Spring Boot + Vue的网上商城之物流系统实现
  • 释放数据价值这道难题,Smartbi V11有解
  • Day_14 > 指针进阶(3)> bubble函数
  • sql中怎么查books表下面的内容
  • Vulnhub系列靶机---HarryPotter-Aragog-1.0.2哈利波特系列靶机-1
  • .NET 8发布首个RC,比.NET 7的超级快更快
  • 在 Substance Painter中自定义Shader
  • 【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)
  • input 的 placeholder 样式
  • 4.4-Spring源码循环依赖终极讲解
  • 腾讯云4核8G服务器选CVM还是轻量比较好?价格对比
  • 数学实验-素数(Mathematica实现)
  • Vue3样式绑定
  • 【深度学习】 Python 和 NumPy 系列教程(廿二):Matplotlib详解:2、3d绘图类型(8)3D饼图(3D Pie Chart)
  • 数仓主题域和数据域、雪花模型,星型模型和星座模型
  • 黑马头条 热点文章实时计算、kafkaStream
  • 数据分析:利用gpt进行归因分析
  • Python工程师Java之路(p)Module和Package
  • 某计费管理系统任意文件读取漏洞
  • LeetCode:1929.数组串联
  • 记录:移动设备软件开发(activity组件)
  • Redis常用应用场景
  • grafana 监控无图解决
  • Linux--进程-消息队列
  • MySQL下载安装环境变量配置,常用命令
  • HSRP(热备份路由选择协议)的概念,原理与配置实验
  • 数据可视化大屏模板 | 保姆级使用教程
  • qml怎么显示网页
  • leetcode分类刷题:二叉树(一、简单的层序遍历)
  • STM32 CAN使用记录:FDCAN基础通讯