常见字符串函数的使用,你确定不进来看看吗?

👦个人主页:@Weraphael
✍🏻作者简介:目前是C语言学习者
✈️专栏:C语言航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关
前言
- 以下所以库函数的查阅都在cplusplus网站
- 以下字符串函数在使用前都要加上#include <string.h>
目录
- 前言
- 1.strlen
- (1)strlen函数介绍
- (2)strlen函数用法
- (3)strlen函数的注意事项
- (4)strlen函数的模拟实现(三种)
- 2.strcpy
- (1)strcpy函数介绍
- (2)strcpy函数用法
- (3)strcpy函数的注意事项
- (4)strcpy函数的模拟实现
- 3.strcat
- (1)strcat函数介绍
- (2)strcat函数用法
- (3)strcat函数的注意事项
- (4)strcat函数的模拟实现
- 4.strcmp
- (1)strcmp函数介绍
- (2)strcmp函数用法
- (3)strcmp函数的模拟实现
- 5.strncpy
- (1)strncpy函数介绍
- (2)strncpy函数用法
- (3)strncpy函数的注意事项
- (4)strncpy函数的模拟实现
- 6.strncat
- (2)strncat函数用法
- (3)strncat函数的注意事项
- (4)strncat函数的模拟实现
- 7.strncmp
- (1)strncmp函数介绍
- (2)strncmp函数用法
- 8.strstr
- (2)strstr函数用法
- (3)strstr函数的模拟实现
- 9.strtok
- strtok函数介绍及用法
- 10.strerror
- (1)strerror函数介绍
- (2)strerror的用途
- (3) 类似函数perror
1.strlen
(1)strlen函数介绍
功能:计算的是字符串中’\0’前面出现的字符个数(不包含’\0’)

(2)strlen函数用法

(3)strlen函数的注意事项
- 参数指向的字符串必须要以’\0’结束
- 注意函数的返回值是size_t,是无符号的;因为字符串的长度不可能为负数
(4)strlen函数的模拟实现(三种)
①计数器count

②递归法
详细解析请参考《递归篇》 点我跳转

③指针 - 指针
详情解析请参考《初识指针》点我跳转

2.strcpy
(1)strcpy函数介绍
功能:拷贝字符串

(2)strcpy函数用法

(3)strcpy函数的注意事项
- 源字符串必须以‘\0’结束
- 目标空间必须足够大,以确保能放下源字符串
- 目标空间必须可变,不能用const修饰
(4)strcpy函数的模拟实现

3.strcat
(1)strcat函数介绍
功能:在字符串后追加字符串

(2)strcat函数用法

(3)strcat函数的注意事项
- 源字符串必须以‘\0’结束
- 目标空间必须要以’\0’结束
- 目标空间必须足够大,能容纳源字符串的内容
- 保证目标空间可修改,不能加const修饰
- strcat不能自己给自己追加
解释:
字符串追加是从目标空间的’\0’开始追加的,追加时会把’\0’覆盖掉,这样字符串就没有结束标志,导致覆盖\0后,源字符串没有以\0结尾,导致死循环
(4)strcat函数的模拟实现

4.strcmp
(1)strcmp函数介绍
功能:比较字符串大小(字典序)

(2)strcmp函数用法

(3)strcmp函数的模拟实现

5.strncpy
(1)strncpy函数介绍
- strncpy与strcpy的功能相同,都是拷贝字符串
- 不同的是:strncpy可以控制拷贝字符串的长度

(2)strncpy函数用法

(3)strncpy函数的注意事项
- 因为受拷贝长度限制,strncpy不会拷贝源字符串的’\0’(看用法),而strcpy会拷贝源字符的’\0’
- 如果源字符串的长度小于num,则拷贝完源字符串之后,它会在目标空间后面自动追加’\0’,直到num个
(4)strncpy函数的模拟实现

6.strncat
- strncat与strcat的功能相同,都是字符串追加
- 不同的是:strncat可以=控制拷贝字符串的长度

(2)strncat函数用法

(3)strncat函数的注意事项
- strncat在目标字符数组追加完之后会自动补’\0’,所以它可以自己追加自己
(4)strncat函数的模拟实现

7.strncmp
(1)strncmp函数介绍
- 与strcmp的功能相同,都是字符串比较
- 不同的是:strncmp可以控制字符串比较的长度

(2)strncmp函数用法

8.strstr
功能:从str1中找str2(找子串)

(2)strstr函数用法

(3)strstr函数的模拟实现
【分析】
情况1:

情况2:

【代码实现】
#include <stdio.h>
#include <string.h>
char* my_strstr(const char* str1, const char* str2)
{//当str2为空串,直接返回str1的地址if (*str2 == '\0'){return str1;}//用s1和s2代替str1和str2来遍历const char* s1 = str1;const char* s2 = str2;//p记录str1的位置const char* p = str1;while (*p){s1 = p;s2 = str2;while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;}//*s2=\0,说明找到子串了if (*s2 == '\0'){return p;}//循环中s1和s2不相等,让p++找下一个位置p++;}//当*p = ‘\0’,说明p遍历完整个数组都没找到子串return NULL;
}
int main()
{char arr1[] = "abbbbcdef";char arr2[] = "\0";char* res = my_strstr(arr1, arr2);//从arr1中找arr2if (res == NULL){printf("找不到\n");}else{printf("找到了:%s\n", res);}return 0;
}
9.strtok
strtok函数介绍及用法
功能:分割字符串

【解析】
- 如上图,delimiters参数是一个字符串,它是分割符的字符集合
- str是被切割的字符串,不能用const修饰
- 函数返回类型是
char*
strtok的作用
- strtok找到str中的分割符,并把分割符变成\0,再返回一个指向这个标记的起始地址
- ①strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
②strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
【完整版】
10.strerror
(1)strerror函数介绍
功能:返回错误码所对应的错误信息
- C语言的库函数在运行的时候,如果发生错误,就会将错误码存在一个全局变量,这个变量是errno
这些错误码通常是一些数字:1,2,3,4,5…

(2)strerror的用途
- fopen函数简介
【用法实现】

(3) 类似函数perror
功能:直接打印错误信息,在打印错误信息前,会先打印自定义的信息
【用法展现】

相关文章:
常见字符串函数的使用,你确定不进来看看吗?
👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…...
Elasticsearch:在搜索中使用衰减函数(Gauss)
在我之前的文章 “Elasticsearch:使用 function_score 及 script_score 定制搜索结果的分数” 我有讲到 Decay 函数在搜索中的使用。在那里,我有一个例子讲述在规定的时间里,分数不进行衰减。同一的函数也可以适用于地理位置的搜索。位置搜索…...
微信小程序 Springboot英语在线学习助手系统 uniapp
四六级助手系统用户端是基于微信小程序端,管理员端是基于web端,本系统是基于java编程语言,mysql数据库,idea开发工具, 系统分为用户和管理员两个角色,其中用户可以注册登陆小程序,查看英语四六级…...
LeetCode算法题解——双指针2
LeetCode算法题解——双指针2第五题思路代码第六题思路代码第七题思路代码这里介绍双指针在数组中的第二类题型:两端夹击。 第五题 977. 有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的…...
线性杂双功能peg化试剂——HS-PEG-COOH,Thiol-PEG-Acid
英文名称:HS-PEG-COOH,Thiol-PEG-Acid 中文名称:巯基-聚乙二醇-羧基 HS-PEG-COOH是一种含有硫醇和羧酸的线性杂双功能聚乙二醇化试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。巯基或SH、巯基或巯基选择性地与马来酰亚胺、OPSS、…...
Linux第三讲
目录 三、 磁盘和文件管理和使用检测和维护 3.1 磁盘目录 3.2 安装软件 3.2.1 rpm命令 3.2.2 克隆虚拟机 3.2.3 yum或压缩包方式安装jdk 3.2.4 使用虚拟机运行SpringBoot项目 3.2.5 安装mysql80(57) 3.2.6 运行web项目 3.2.7 安装tomcat 三、 …...
SpringBoot07:SpringSecurity
Security是什么? 是一个安全框架。可以用来做认证和授权 官网:Spring Security SpringSecurity环境搭建 1、创建一个新的project 2、导入thymeleaf依赖 <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf…...
C++ 浅谈之 STL Vector
C 浅谈之 STL Vector HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 C 浅谈系列,收录在专栏 C 语言中 😜😜😜 本系列阿呆将记录一些 C 语言重要的语法特性 🏃&…...
【个人作品】非侵入式智能开关
一、产品简介 一款可以通过网络实现语音、APP、小程序控制,实现模拟手动操作各种开关的非侵入式智能开关作品。 非侵入式,指的是不需要对现有的电路和开关做任何改动,只需要将此设备使用魔术无痕胶带固定在旁边即可。 以下为 ABS 材质的渲…...
数据存储技术复习(三)未完
module4智能存储系统是功能丰富且可提供高度优化的I/o处理能力的RAID阵列。请绘制智能存储系统架构,并说明其各个关键组件的主要功能。前端缓存后端物理磁盘2.智能存储系统中,使用缓存进行的写入操作与直接写入到磁盘相比,可以带来…...
ThinkPHP数据库迁移工具
安装 composer require topthink/think-migration 创建迁移工具文件 //执行命令,创建一个操作文件,一定要用大驼峰写法,如下 php think migrate:create AnyClassNameYouWant //执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件 //文件名类似/database/m…...
代理模式(Proxy Pattern)
代理模式定义: 提供了对目标对象另外的访问方式;即通过代理对象访问目标对象。举个例子:猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰和孙悟空都实现了这个接口ÿ…...
Elasticesearch内存详解
1.ES基本概念 为了更好的理解内存,我们先看一下ES的基本概念。 1.1 cluster 集群 多个节点组合在一起就形成了一个集群,在每个ES节点中,我们可以通过配置集群的名称来使各个节点组合在一起,成为一个集群。当某些节点的集群名称一样,ES会自动根据配置文件中的地址找到这些…...
SpringCloud之断路器聚合监控
一、Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单,只需要…...
凭借这份《2022测试八股文》候选者逆袭面试官,offer拿到手软
《2023测试面试八股文》800 道软件测试面试真题,高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试理论、Linux、MySQL、Web 测试、接口测试、App 测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维…...
【i2c协议介绍】
文章目录协议简单介绍五种速度模式master/slave和transmitter/receiver关系第一种情况:master作为transmitter,slave作为receiver第二种情况:当master作为receiver,slave作为transmitteri2c基本信号start产生stop信号数据传输有效…...
167. 两数之和 II - 输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 < numbers…...
编译与链接------《程序员的自我修养》
本篇整理于《程序员的自我修养》一书中编译与链接相关知识,整理的目的是为了更加深入的了解编译于链接的更多底层知识,面对程序运行时种种性能瓶颈我们束手无策。我们看到的是这些问题的现象,但是却很难看清本质,所有这些问题的本质就是软件运…...
5分钟搞懂 强缓存与协商缓存
Ⅰ、http缓存 HTTP 缓存策略 分为 > 「强制缓存」 和 「协商缓存」 为什么需要 HTTP 缓存 呢 ? 👇 直接使用缓存速度 >> 远比重新请求快 缓存对象有那些呢 ?👇 「图片」 「JS文件」 「CSS文件」 等等 文章目录Ⅰ、http缓存Ⅱ…...
Ts笔记第一天
文章目录安装 ts运行环境 nodeTS类型数字 、字符串 和布尔类型字面量any 和unknown类型断言void和neverobjectArraytuple 元组enum 枚举安装 ts运行环境 node node-v看版本号 2. 安装ts -g全局安装 npm i -g typescript // 这里全局安装 -s安装无法使用tsc 创建一个01.ts文…...
包装器简介
可调用对象:可以使用()运算符进行调用的对象,本质是能像函数一样使用的东西常见课调用对象:函数指针,仿函数,lambda表达式我们能否使用统一的方式对其封装,进行调用,这时…...
从零到一:基于泛微E9开源资源的企业级业务模块二次开发实战指南
1. 为什么选择泛微E9进行二次开发? 泛微E9作为国内领先的OA系统,在企业信息化建设中扮演着重要角色。我接触过不少企业客户,他们选择E9的主要原因很简单:开箱即用的功能已经能满足80%的日常办公需求,而剩下的20%特殊需…...
【架构实战】分布式事务解决方案
一、分布式事务的挑战 在微服务架构下,一个业务操作可能涉及多个服务的数据修改。传统的本地事务无法保证跨服务的数据一致性。 经典场景: 用户下单 → 订单服务扣库存 → 支付服务扣余额 → 物流服务创建运单任何一步失败,都需要回滚之前的操…...
PTA L1-064 AI核心代码:从‘估值一亿’到‘精准实现’的避坑指南
1. 这道题为什么值"一亿"? PTA L1-064被戏称为"估值一亿"的题目,主要因为它在字符串处理中埋了多个隐蔽的坑点。我第一次做这道题时,看着题目要求觉得规则很明确,不就是几个字符串替换吗?结果提交…...
Windows 内网 Web 服务穿透方案推荐
Windows 内网 Web 服务穿透方案推荐 面向场景:内网机器为 Windows,需从公网或外网访问内网 HTTP/HTTPS Web 服务;优先选择相对不易被误报、来源清晰、可审计的方案。 关于「报毒」的说明 穿透类软件常被启发式引擎标为「风险/可疑」…...
自动驾驶、无人机导航都离不开它:卡尔曼滤波在机器人SLAM中的实战调参心得
自动驾驶与无人机导航中的卡尔曼滤波实战:SLAM系统调参进阶指南 卡尔曼滤波算法自1960年问世以来,已成为机器人定位与导航领域不可或缺的核心技术。无论是自动驾驶汽车的精准定位,还是无人机在复杂环境中的自主飞行,亦或是工业机器…...
iPhone 抓包失败 4 种具体情况逐个解决方法
抓不到包这个描述太模糊了,在实际调试中,这句话至少对应四种完全不同的情况: 完全没有请求只有浏览器能抓到能抓到但 HTTPS 解不开能抓到但数据不完整 如果不先分清楚是哪一种,就会一直重复安装证书或改代理配置。一、先做一个验证…...
OpenPPL之二,优化器里面的算子融合
算子融合的执行时机 完整的时间线 模型加载阶段(一次) 运行时阶段(多次推理)↓ ↓ ┌─────────────────────┐ ┌─────────────┐ │ 1. 解析ON…...
Qt 5.12.8在Linux下编译qtvirtualkeyboard模块,我踩过的那些坑(附完整解决方案)
Qt 5.12.8在Linux下编译qtvirtualkeyboard模块的深度实践指南 当你在嵌入式或跨平台开发中突然发现系统自带的Qt缺少虚拟键盘模块时,那种感觉就像在沙漠里找到一瓶水却发现没带开瓶器。本文将带你深入探索在aarch64架构的Linux系统中,如何为预装的Qt 5.1…...
嵌入式软件工程师面试技术要点解析
嵌入式软件工程师面试技术要点解析1. 通信接口技术1.1 RS-485通信特性RS-485标准采用差分信号传输,物理层上支持全双工通信,但在实际应用中通常配置为半双工模式。这种设计选择主要基于以下工程考虑:半双工模式下只需一对双绞线,显…...










