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

👦个人主页:@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文…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...










