strlen函数

news2024/10/6 6:05:17

文章目录

  • strlen函数
  • 模拟实现:

strlen函数

strlen函数是用来计算字符串长度的,不包括‘\0’
使用:

#include<stdio.h>
#include<string.h>

int main() {
	char arr[] = "abcdef";
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

在这里插入图片描述

模拟实现:

先看一下库函数strlen是怎么定义的
在这里插入图片描述
可知库函数中strlen的返回值为无符号的int类型,形参为不可修改的指针变量,返回类型也可写成int,但字符串长度不可能为负数所以为了保险起见要写成size_t;两个size_t类型的值相减值也是size_t;
写法一:

#include<stdio.h>
#include<assert.h>

int my_strlen(const char* str) 
{
	assert(str != NULL);//预防字符串为空
	int count = 0;
	while (*str++ != '\0') 
	{
		count++;
	}
	return count;
}
int main() 
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

写法二:递归的方式

#include<stdio.h>
#include<assert.h>

int my_strlen(const char* str)
{
	assert(str != NULL);//预防字符串为空
	if (*str != '\0') 
	{
		return 1 + my_strlen(str+1);
	}
	else
	{
		return 0;
	}
}
int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

写法三:指针减指针

#include<stdio.h>
#include<assert.h>

int my_strlen(const char* str)
{
	assert(str != NULL);//预防字符串为空
	const char* start = str;
	/*while (*str++ != '\0') //这种写法不对
	{
		;
	}*/
	while (*str != '\0')
	{
		str++;
	}
	return str - start;//两个指针相减恰好为两指针之间的元素个数
}
int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础(第一期):IDEA的下载和安装(步骤图) 项目结构的介绍 项目、模块、类的创建。第一个代码的实现

文章目录 IDEA1.1 IDEA概述1.2 IDEA的下载和安装1.2.1 下载1.2.2 安装 1.3 IDEA中层级结构介绍1.3.1 结构分类1.3.2 结构介绍project&#xff08;项目、工程&#xff09;module&#xff08;模块&#xff09;package&#xff08;包&#xff09;class&#xff08;类&#xff09; …

vue3 使用 elementUi: ./lib/theme-chalk/index.css is not exported from package

目录 1. 在 vue3 中使用 element-ui2. 如果启动报错&#xff1a;Module not found: Error: Package path ./lib/theme-chalk/index.css is not exported from package 1. 在 vue3 中使用 element-ui 在 vue3 中使用 element-ui&#xff0c;我们的流程一般是这样的&#xff1a;…

17 Transformer 的解码器(Decoders)——我要生成一个又一个单词

Transformer 编码器 编码器在干吗&#xff1a;词向量、图片向量&#xff0c;总而言之&#xff0c;编码器就是让计算机能够更合理地&#xff08;不确定性的&#xff09;认识人类世界客观存在的一些东西 Transformer 解码器 解码器会接收编码器生成的词向量&#xff0c;然后通…

Go并发编程之二

一、前言 前一篇 Go并发编程之一 主要介绍了如何通过go语句启动协程&#xff08;goroutine&#xff09;以及协程调度的不确定性&#xff0c;这一篇我们重点来介绍一下协程中另外一个重要概念channel&#xff0c;记住第一句话&#xff1a; goroutine之间不是通过共享内存来通信…

JUC高并发容器-CopyOnWriteArrayList

CopyOnWriteArrayList JUC高并发容器线程安全的同步容器类什么是高并发容器&#xff1f;CopyOnWriteArrayList JUC高并发容器 线程安全的同步容器类 Java同步容器类通过Synchronized(内置锁)来实现同步的容器&#xff0c;比如Vector、HashTable以及SynchronizedList等容器。线…

react封装一个简单的upload组件(待完善)

目录 react封装一个简单的upload组件component / uploadImg / uploadImg.jsx使用效果 react封装一个简单的upload组件 component / uploadImg / uploadImg.jsx import React, { useState } from react; import { LoadingOutlined, PlusOutlined } from ant-design/icons; imp…

【源码】C/C++运动会计分系统 期末设计源码

文章目录 题目介绍功能源码效果展示带报告&#xff08;内容&#xff09; 题目介绍 使用语言&#xff1a; 两个版本都会发&#xff1a; 版本1&#xff1a;C语言 版本2&#xff1a; C 代码量&#xff1a; 500 题目介绍&#xff1a; 要求&#xff1a;初始化输入&#xff1a;N-参赛…

C++ 中的模型预测路径积分 (MPPI) 控制

一、说明 模型预测路径积分控制&#xff08;MPPI&#xff09;是一种基于采样的模型预测控制算法。是MPC控制模型的延申和拓宽&#xff0c;要了解MPPI需要先理解MPC&#xff0c;参见文章&#xff1a;MPC预测控制概述和C 中的模型库-CSDN博客 二、模型预测路径积分 (MPPI) 控制 模…

【小白专用23.10.22 已验证】windows 11 安装PHP8.2 +Apache2.4

环境说明 windows:windows 11 x64apache: Apache/2.4.43php :php-8.2.11 一.php 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php8apache2_4.dll这个文件&#xff1b;如果使用Apache作为服务器…

Casbin实战经验大揭秘:教育培训领域的创新实践和高效优化策略

策略描述语言&#xff08;论文&#xff09; 摘要: 为了保护云资源的安全&#xff0c;防止数据泄露和非授权访问&#xff0c;必须对云平台的资源访问实施访问控制。然而&#xff0c;目前主流云平台通常采用自己的安全策略语言和访问控制机制&#xff0c;从而造成两个问题&#x…

Jenkins简介及安装配置详解:开启持续集成之旅

目录 一、Jenkins介绍1.1 持续集成1.2 Jenkins持续集成的过程&#xff08;传统方式与自动化部署&#xff09; 二、环境搭建1、准备工作2、WEB发布服务器环境搭建3、SVN服务器环境搭建4、Jenkins环境搭建 一、Jenkins介绍 Jenkins是一个开源的、用Java编写的持续集成和持续交付&…

Defender Antivirus占用资源怎么禁止

前言 有时Defender Antivirus 突然磁盘IO很高。导致机器卡得很&#xff0c;开发代码很不方便&#xff0c;本文就介绍如何禁用这个服务。2f089809-2c6f-4fb7-86f5-8b5cbca8bd0d 操作 下载Defender Control https://www.sordum.org/9480/defender-control-v2-1/ 这是当前的最…

Adobe Photoshop 基本操作

PS快捷键 图层 选择图层 Ctrl T&#xff1a;可以对图层的大小和位置进行调整 填充图层 MAC: AltBackspace (前景) or CtrlBackspace (背景) WINDOWS: AltDelete (前景) or CtrlDelete (背景) 快速将图层填充为前景色或背景色 平面化图层&#xff08;盖印图层&#xff09…

uniapp实现登录组件之外区域置灰并引导登录

实现需求 每个页面需要根据用户是否登录决定是否显示登陆组件,登录组件半屏底部显示,登录组件之外区域置灰,功能按钮点击之后引导提示登录.页面效果如下: 实现思路说明 设置登录组件背景颜色为灰色,将页面分成登录区域(底部)和非登陆区域(上面灰色显示部分), 置灰区域添加…

嵌入式学习笔记(61)位操作符

2.1.1.位与& (1)注意&#xff1a;位与符号是一个&&#xff0c;两个&&是逻辑与。 (2)真值表&#xff1a;1&00 1&11 0&00 0&10 (3)从真值表可以看出&#xff1a;位与操作的特点是&#xff0c;只有1和1位于结果为1&#xff0c;其余全是0. (4)…

【Java】Java 17 新特性

Java 17 新特性概览 1. Java 17 简介2. Java 17 新特性类型推断 - 新的 var 关键字垃圾回收器改进JEP 356 增强的伪随机数生成器&#xff08;1&#xff09;提供了一个新接口 RandomGenerator&#xff08;2&#xff09;提供了一个新类 RandomGeneratorFactory&#xff08;3&…

Flutter的Don‘t use ‘BuildContext‘s across async gaps警告解决方法

文章目录 问题有问题的源码 问题原因问题分析Context的含义BuildContext的作用特殊情况 解决方法 问题 Flutter开发中遇到Don’t use BuildContext’s across async gaps警告 有问题的源码 if (await databaseHelper.isDataExist(task.title)) {showDialog(context: context,…

在PowerBI中提取IFC文件中的数据

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 在这篇文章中&#xff0c;我将逐步介绍从IFC文件中提取数据以创建 Shift IFC4PowerBI 函数的步骤。通过了解此工作流程&#xff0c;你能够更轻松地将 IFC 数据合并到自己的流程中。 在本文中&#xff0c;我们将重点关注文…

Reparameterization trick(重参数化技巧)

“Reparameterization trick”&#xff08;重参数化技巧&#xff09;是一种在训练生成模型中处理随机性潜在变量的方法&#xff0c;特别常见于变分自动编码器&#xff08;VAE&#xff09;等模型中。这个技巧的目的是使模型可微分&#xff08;differentiable&#xff09;&#x…

【源码】C++坦克大战源码

文章目录 题目介绍你收到的所有文件源码效果展示报告内容 题目介绍 代码量&#xff1a;1450 语言&#xff1a;C 你收到的所有文件 其中一个是devc版本&#xff0c;也可以用visual stdio 运行。 源码效果展示 typedef struct //这里的出现次序指的是一个AI_ta…