C语言学习NO.11-字符函数strlen,strlen函数的使用,与三种strlen函数的模拟实现
(一)strlen函数的使用
strlen函数的演示
#include <stdio.h>
#include <string.h>int main()
{char arr1[] = "abcdef";char arr2[] = "good";printf("arr1 = %d,arr2 = %d",strlen(arr1),strlen(arr2));return 0;
}
(二)strlen使用的注意事项
• 参数指向的字符串必须要以 '\0' 结束。
• strlen的使用需要包含头文件 <string.h>
• 注意函数的返回值为size_t,是无符号的( 易错 )
//注意函数的返回值为size_t,是无符号的( 易错 ) #include <stdio.h>
#include <string.h>
int main()
{const char* str1 = "abcdef";const char* str2 = "bbb";if (strlen(str2) - strlen(str1) > 0)//无符号的两个数相减{printf("str2>str1\n");}else{printf("srt1>str2\n");}return 0;
}
为何输出的结果与预期的不同?
strlen的返回值类型是无符号型,无符号型-无符号型还是无符号型,因此最后的结果一定是大于0的。
因此在比较两组字符串大小时,我们应采用直接比较的方式
(三)strlen的模拟实现
方式1:使用函数模拟strlen
//计数器方式
//使用函数模拟strlen#include <stdio.h>
#include <assert.h>int my_strlen(const char* str)
{int count = 0;assert(str != NULL);//断言 防止str为空指针while (*str)//while (*str != '\0'){count++;str++;}return count;
}int main()
{char arr[] = "abcdef";int len = my_strlen(arr);printf("%d", len );return 0;
}
方式2:使用递归的方式
//不能创建临时变量计数器
//3:使用递归方式
#include <stdio.h>
#include <assert.h>int my_strlen(const char* str)
{//assert(str != NULL);if (*str == '\0')return 0;elsereturn 1 + my_strlen(str+1);//疑问:为什么无法使用str++?
}int main()
{char arr[] = "abcdef";int len = my_strlen(arr);printf("%d", len);return 0;
}
//疑问:为什么无法使用str++?
答:后置++ 是先使用后自增
所以这里如果这样写 传进去的那个地址值就还是原本的指向
如果用str++ 先使用 后自增 这里的使用表示传参 所以就只会把a的地址传进去 就不符合我们的预期了
这里我们可以调试观察。
一、str++的调试结果
在程序进行中,每次进入新阶段前,str的地址发生了改变,但是进入新阶段后,仍是原地址。
二、使用++str的调试结果
str所指向的地址发生了变化。
因此,我们在此处希望由a的地址转换到b的地址,可使用str+1或前置++str的方式。
方式3:指针-指针的方式
//使用指针-指针的方式
#include <stdio.h>
#include <assert.h>int my_strlen(const char* str)
{assert(str);char *s = str;while (*s != '\0')s++;return s - str;//指针-指针=之间元素的个数
}int main()
{char arr[] = "abcdef";int len = my_strlen(arr);printf("%d", len);return 0;
}
相关文章:
C语言学习NO.11-字符函数strlen,strlen函数的使用,与三种strlen函数的模拟实现
(一)strlen函数的使用 strlen函数的演示 #include <stdio.h> #include <string.h>int main() {char arr1[] "abcdef";char arr2[] "good";printf("arr1 %d,arr2 %d",strlen(arr1),strlen(arr2));return …...
Vue3+ts获取props的值并且定义props值的类型的方法。
1.引入withDefaults模块,给defineProps绑定默认值。 import { withDefaults } from vue2.定义Props传输值的类型。 interface Props {// 类型type: string;name: string;id: number; }3.给props的值设置默认值。 const props withDefaults(defineProps<Prop…...
EasyExcel 不使用科学计数发并以千分位展示
EasyExcel 不使用科学计数发并以千分位展示 不使用科学计数法 不使用科学计数法 BigDecimalStringConverter 将 BigDecimal 类型的数值转换为字符串类型,并将其导出到 Excel 文件中。在 convertToExcelData 方法中,我们将 BigDecimal 转换为字符串&…...
【Python机器学习】SVM——调参
下面是支持向量机一个二维二分类数据集的训练结果: import mglearn import matplotlib.pyplot as plt from sklearn.svm import SVCplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False X,ymglearn.tools.make_handcrafted_dataset()…...
网络传输(TCP)
前言 我们tcpdump抓包时会看到除报文数据外,前面还有一段其他的数据,这段数据分为两部分,ip包头(一般20字节)和tcp包头(一般20字节),一般这两个头长度和为40,我们直接跳…...
MFC模拟消息发送,自定义以及系统消息
在MFC框架下,有很多系统已经定义好的消息,例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。我们在使用的时候只需要声明并调用就可以了,最简单的用法。 提升了一点难度的用法就是自己设置自定义消息,再提升一点难度的就是如何…...
并发,并行,线程与UI操作
并行和并发是计算机领域中两个相关但不同的概念。 并行(Parallel)指的是同时执行多个任务或操作,它依赖于具有多个处理单元的系统。在并行计算中,任务被分成多个子任务,并且这些子任务可以同时在不同的处理单元上执行…...
react 6种方式编写样式
在React中,编写样式主要有以下几种方式: 1. 内联样式: 直接在React组件中使用style属性来定义样式。这种方式比较适合定义动态的样式,因为它允许你将JavaScript表达式作为样式的值。 2. 外部样式表 :通过创建外部的…...
计算机找不到msvcr100.dll的多种解决方法分享,轻松解决dll问题
msvcr100.dll作为系统运行过程中不可或缺的一部分,它的主要功能在于提供必要的运行时支持,确保相关应用程序能够顺利完成编译和执行。因此,当操作系统或应用程序在运行阶段搜索不到该文件时,自然会导致各类依赖于它的代码无法正常…...
系分笔记数据库反规范化、SQL语句和大数据
文章目录 1、概要2、反规范化3、大数据4、SQL语句5、总结 1、概要 数据库设计是考试重点,常考和必考内容,本篇主要记录了知识点:反规范化、SQL语句及大数据。 2、反规范化 数据库遵循范式的设计,使得多表查询和连接表查询较多的时…...
php实现支付宝商户转账
目录 一:背景介绍 一:准备工作 三:代码实现 一:背景介绍 最近工作中,要用到支付宝的商家转账功能,用php代码实现,网上找的内容,有些是老版本的实现,有些是调用sdk&am…...
并发编程(十一)
性能测试的常用命令 1、Netstat是在内核中访问网络连接状态及其相关信息的程序,它能够显示协议统计和当前TCP/IP的网络连接。 Netstat命令的常用格式如下: netstat -a:显示所有网络连接和侦听端口。 netstat -b:显示在创建网络…...
vue3 指令详解
系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、v-model (双向绑定功能)二、v-bind(用于将一个或多个属性绑定到元素的属性或组件的 prop)三、v-if、v-else、v-else-if(用于根据条件选择性地渲染元素)四、v-show(根…...
数据科学竞赛平台推荐
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
安全防御之安全审计技术
安全防御中的安全审计技术是保障信息系统安全的重要手段之一。其主要目标是对信息系统及其活动进行记录、审查和评估,以确保系统符合安全策略、法规要求,并能够及时发现潜在的安全风险和异常行为。通过安全审计,可以对系统中的各种活动进行记…...
C#多窗口那些事儿
目录 1、调用窗体与被调用窗体 2、窗体的本质 3、调用窗体访问被调用窗体内部对象 4、被调用窗体访问调用窗体 (1)被动方式,也就是调用窗体主动给被调用窗体一个“接口” i.调用窗体定义“静态”变量,并将开放的变量复制 ii.在被调用窗体中,使用:调用窗体名.静态变…...
记一次 Redis 数据库迁移
笔者通过一个 Redis 数据库迁移的例子,介绍了迁移脚本的执行思路。 作者:马文斌,MySQL/Redis 爱好者~ 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 500 字,预计阅…...
小学信息科技Python课程第2课:坐标与画笔
一、turtle画布与坐标系 在同一平面互相垂直且有公共原点的两条数轴构成平面直角坐标系。在坐标系中,水平方向的轴都称为x轴,垂直方向的轴都称为y轴 它们相交于O点,在这一个点里,x轴的值为0,y轴的值也为0,所…...
BP神经网络(公式推导+举例应用)
文章目录 引言M-P神经元模型激活函数多层前馈神经网络误差逆传播算法缓解过拟合化结论实验分析 引言 人工神经网络(Artificial Neural Networks,ANNs)作为一种模拟生物神经系统的计算模型,在模式识别、数据挖掘、图像处理等领域取…...
Word不同部分(分节)设置页眉和页码的使用指南——附案例操作
Word页眉和页码分节设置的使用指南 目录 Word页眉和页码分节设置的使用指南摘要1. 插入分节符2. 设置不同的页眉3. 设置不同的页码4. 调整页码的起始值5. 删除或更改分节6. 预览和调整 摘要 在撰写word文档时,我们经常需要在不同的部分应用不同的页眉和页码格式。在…...
Ubuntu按转发HDF5
源码编译流程 下载源代码 wget https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.zip 解压 unzip hdf5-1.14.3.zip 进入解压后的目录 cd hdf5-1.14.3 编译 依次执行下面的命令 ./configure --prefix/usr/local/hdf5…...
HCIP OSPF实验
任务: 1.使用三种解决ospf不规则区域的方法 2.路由器5、6、7、8、15使用mgre 3.使用各种优化 4.全网可达 5.保证更新安全 6.使用地址为172.16.0.0/16合理划分 7.每个路由器都有环回 拓扑图&IP划分如下: 第一步,配置IP&环回地址…...
Linux上如何一键安装软件?yum源是什么?Linux如何配置yum源?
这几个问题是Linux操作的入门问题,但是确实也会让刚上手Linux小伙伴头疼一阵,故特有此文,希望能对刚入门的小伙伴有一些帮助~ 众所周知 在linux上在线安装软件需要用到yum命令,经常下述命令来安装 yum install [-y] 包名 #-y的…...
Egg框架搭建后台服务【1】
需求 博客系统升级,本来是用 express 写的,最近发现 Egg 不错,正好学习升级一下。边学边写。 Ps:相同的功能,迭代的写法,由浅入深,做个记录。 开发 初始化 安装 node版本需要 >14.20.0…...
Unity的Camera类——视觉掌控与深度解析(下)
前言 欢迎阅读本篇博客,这章我们将深入探讨 Unity 游戏引擎中 Camera 类的委托和枚举。摄像机在游戏开发中扮演着关键角色,它不仅定义了玩家视角的窗口,还影响着游戏的视觉表达和整体体验。理解和正确使用 Camera 类的枚举和委托,…...
【模型评估 06】超参数调优
对于很多算法工程师来说,超参数调优是一件非常头疼的事情。除了根据经验设定所谓的“合理值”之外,一般很难找到合理的方法去寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有没有一些可行的办法去进行超参数的调优…...
Matlab 字符识别OCR实验
Matlab 字符识别实验 图像来源于屏幕截图,要求黑底白字。数据来源是任意二进制文件,内容以16进制打印输出,0-9a-f’字符被16个可打印字符替代,这些替代字符经过挑选,使其相对容易被识别。 第一步进行线分割和字符分割…...
Docker Compose 部署 jenkins
Docker Compose 部署 jenkins jenkins 部署 Docker-Compose 部署 version: 3.1 services:jenkins:image: jenkinsci/blueoceanvolumes:- /data/jenkins/:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/docker- /usr/lib/x86_64-…...
QT:使用QStyle实现QMenu的滚动效果
项目中,使用QMenu,多个QAction时 超出页面范围,需要菜单栏可以上下滚动。 实际QMenu是带滚动的,但是要知道怎么使用 还是需要查看QT源码,现在简单记录下我的使用方法。 QT源码中:q->style()->style…...
双指针问题——求只包含两个元素的最长连续子序列(子数组)
一,题目描述 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必…...
php网站开发推荐书籍/近期国家新闻
背景(centos7中):由于在刚开始学习linux时磁盘分配追求简单,只是把一个磁盘简单的分了3个分区。现在,因用户数据增多、磁盘空间变少、当数据撑满磁盘时,会导致系统崩溃。为防止此种情况的发生我必须把把根下的/home 目录迁移出 来…...
哪里有html5网站建设/大学生网络营销策划方案书
根据 wav 文件格式规范,利用 ultraEdit 等工具软件,对你所采集的某一 wav 文件的采样率、量化位数、声道数等参数进行验证, 并图形标注。 wav文件是文件的一种格式,主要是音乐、语音的文件存储格式,本次博客将讲解如何…...
公司网站不用了如何注销/常州谷歌优化
源地址:http://database.51cto.com/art/200903/113314.htm 摘要:数据库厂商微软和甲骨文是在2008年开始重视云数据库。分析师们预计,在2009年数据库厂商会把更多的数据库功能增加到云中。2008年只是云计算开始步入数据库市场。 数据库厂商微软…...
电子商务网站建设项目规划书/郴州seo外包
转自: 1. v-text 作用 : 操作元素中的纯文本 快捷方式 : {{}} 栗子1 简写形式:将v-text""换成{{}} <div id"app">{{ message }} </div> var app new Vue({el : #app, data : { message : hello …...
做网站 如何 挣钱/百度指数app官方下载
“由于终端连接目前正在忙于处理一个连接断开连接复位或删除操作来源:未知作者:老黑时间:09-11-24【打印】“由于终端连接目前正在忙于处理一个连接断开连接复位或删除操作无法完成该请求的操作”的解决方法因为公测时候人数过多导致服务器终…...
电商网站建设济南建网站/太原百度快速排名提升
【2019.6.20 最后编辑】要理解本文,请务必将实验1:框架设计者走一遍。(实验的改进BubbleSort的步骤二,)针对抽象类型编程,表示为SortTest→IntSort<BubbleSort1.1.3控制反转现在聚焦SortTest,它是测试流程的控制模块…...