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

👦个人主页:@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文…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
基于 HTTP 的单向流式通信协议SSE详解
SSE(Server-Sent Events)详解 🧠 什么是 SSE? SSE(Server-Sent Events) 是 HTML5 标准中定义的一种通信机制,它允许服务器主动将事件推送给客户端(浏览器)。与传统的 H…...










