当前位置: 首页 > news >正文

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

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前是C语言学习者
✈️专栏:C语言航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关


前言

  1. ​以下所以库函数的查阅都在cplusplus网站
  2. 以下字符串函数在使用前都要加上#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函数的注意事项

  1. 参数指向的字符串必须要以’\0’结束
  2. 注意函数的返回值是size_t,是无符号的;因为字符串的长度不可能为负数
    在这里插入图片描述

(4)strlen函数的模拟实现(三种)

①计数器count
​​​​在这里插入图片描述
②递归法

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

在这里插入图片描述
③指针 - 指针

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

在这里插入图片描述

2.strcpy

(1)strcpy函数介绍

功能:拷贝字符串

在这里插入图片描述

(2)strcpy函数用法

在这里插入图片描述

(3)strcpy函数的注意事项

  1. 源字符串必须以‘\0’结束
  2. 目标空间必须足够大,以确保能放下源字符串
  3. 目标空间必须可变,不能用const修饰

(4)strcpy函数的模拟实现

在这里插入图片描述

3.strcat

(1)strcat函数介绍

功能:在字符串后追加字符串

在这里插入图片描述

(2)strcat函数用法

在这里插入图片描述

(3)strcat函数的注意事项

  1. 源字符串必须以‘\0’结束
  2. 目标空间必须要以’\0’结束
  3. 目标空间必须足够大,能容纳源字符串的内容
  4. 保证目标空间可修改,不能加const修饰
  5. 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函数的注意事项

  1. 因为受拷贝长度限制,strncpy不会拷贝源字符串的’\0’(看用法),而strcpy会拷贝源字符的’\0’
  2. 如果源字符串的长度小于num,则拷贝完源字符串之后,它会在目标空间后面自动追加’\0’,直到num个
    在这里插入图片描述

(4)strncpy函数的模拟实现

在这里插入图片描述

6.strncat

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

在这里插入图片描述

(2)strncat函数用法

在这里插入图片描述

(3)strncat函数的注意事项

  1. 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的作用

  1. strtok找到str中的分割符,并把分割符变成\0,再返回一个指向这个标记的起始地址
    在这里插入图片描述
  2. ①strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
    ②strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
    在这里插入图片描述
    【完整版】
    在这里插入图片描述

10.strerror

(1)strerror函数介绍

功能:返回错误码所对应的错误信息

  • C语言的库函数在运行的时候,如果发生错误,就会将错误码存在一个全局变量,这个变量是errno
    这些错误码通常是一些数字:1,2,3,4,5…
    在这里插入图片描述

在这里插入图片描述

(2)strerror的用途

  • fopen函数简介在这里插入图片描述

【用法实现】

在这里插入图片描述

(3) 类似函数perror

功能:直接打印错误信息,在打印错误信息前,会先打印自定义的信息
在这里插入图片描述

【用法展现】
在这里插入图片描述

相关文章:

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

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…...

Elasticsearch:在搜索中使用衰减函数(Gauss)

在我之前的文章 “Elasticsearch&#xff1a;使用 function_score 及 script_score 定制搜索结果的分数” 我有讲到 Decay 函数在搜索中的使用。在那里&#xff0c;我有一个例子讲述在规定的时间里&#xff0c;分数不进行衰减。同一的函数也可以适用于地理位置的搜索。位置搜索…...

微信小程序 Springboot英语在线学习助手系统 uniapp

四六级助手系统用户端是基于微信小程序端&#xff0c;管理员端是基于web端&#xff0c;本系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;idea开发工具&#xff0c; 系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆小程序&#xff0c;查看英语四六级…...

LeetCode算法题解——双指针2

LeetCode算法题解——双指针2第五题思路代码第六题思路代码第七题思路代码这里介绍双指针在数组中的第二类题型&#xff1a;两端夹击。 第五题 977. 有序数组的平方 题目描述&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的…...

线性杂双功能peg化试剂——HS-PEG-COOH,Thiol-PEG-Acid

英文名称&#xff1a;HS-PEG-COOH&#xff0c;Thiol-PEG-Acid 中文名称&#xff1a;巯基-聚乙二醇-羧基 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&#xff08;57&#xff09; 3.2.6 运行web项目 3.2.7 安装tomcat 三、 …...

SpringBoot07:SpringSecurity

Security是什么&#xff1f; 是一个安全框架。可以用来做认证和授权 官网&#xff1a;Spring Security SpringSecurity环境搭建 1、创建一个新的project 2、导入thymeleaf依赖 <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf…...

C++ 浅谈之 STL Vector

C 浅谈之 STL Vector HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是 C 浅谈系列&#xff0c;收录在专栏 C 语言中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些 C 语言重要的语法特性 &#x1f3c3;&…...

【个人作品】非侵入式智能开关

一、产品简介 一款可以通过网络实现语音、APP、小程序控制&#xff0c;实现模拟手动操作各种开关的非侵入式智能开关作品。 非侵入式&#xff0c;指的是不需要对现有的电路和开关做任何改动&#xff0c;只需要将此设备使用魔术无痕胶带固定在旁边即可。 以下为 ABS 材质的渲…...

数据存储技术复习(三)未完

module4智能存储系统是功能丰富且可提供高度优化的I/o处理能力的RAID阵列。请绘制智能存储系统架构&#xff0c;并说明其各个关键组件的主要功能。前端缓存后端物理磁盘2&#xff0e;智能存储系统中&#xff0c;使用缓存进行的写入操作与直接写入到磁盘相比&#xff0c;可以带来…...

ThinkPHP数据库迁移工具

安装 composer require topthink/think-migration 创建迁移工具文件 //执行命令,创建一个操作文件,一定要用大驼峰写法,如下 php think migrate:create AnyClassNameYouWant //执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件 //文件名类似/database/m…...

代理模式(Proxy Pattern)

代理模式定义&#xff1a; 提供了对目标对象另外的访问方式&#xff1b;即通过代理对象访问目标对象。举个例子&#xff1a;猪八戒去找高翠兰结果是孙悟空变的&#xff0c;可以这样理解&#xff1a;把高翠兰的外貌抽象出来&#xff0c;高翠兰和孙悟空都实现了这个接口&#xff…...

Elasticesearch内存详解

1.ES基本概念 为了更好的理解内存,我们先看一下ES的基本概念。 1.1 cluster 集群 多个节点组合在一起就形成了一个集群,在每个ES节点中,我们可以通过配置集群的名称来使各个节点组合在一起,成为一个集群。当某些节点的集群名称一样,ES会自动根据配置文件中的地址找到这些…...

SpringCloud之断路器聚合监控

一、Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值&#xff0c;要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单&#xff0c;只需要…...

凭借这份《2022测试八股文》候选者逆袭面试官,offer拿到手软

《2023测试面试八股文》800 道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web 测试、接口测试、App 测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维…...

【i2c协议介绍】

文章目录协议简单介绍五种速度模式master/slave和transmitter/receiver关系第一种情况&#xff1a;master作为transmitter&#xff0c;slave作为receiver第二种情况&#xff1a;当master作为receiver&#xff0c;slave作为transmitteri2c基本信号start产生stop信号数据传输有效…...

167. 两数之和 II - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers…...

编译与链接------《程序员的自我修养》

本篇整理于《程序员的自我修养》一书中编译与链接相关知识&#xff0c;整理的目的是为了更加深入的了解编译于链接的更多底层知识&#xff0c;面对程序运行时种种性能瓶颈我们束手无策。我们看到的是这些问题的现象,但是却很难看清本质&#xff0c;所有这些问题的本质就是软件运…...

5分钟搞懂 强缓存与协商缓存

Ⅰ、http缓存 HTTP 缓存策略 分为 > 「强制缓存」 和 「协商缓存」 为什么需要 HTTP 缓存 呢 ? &#x1f447; 直接使用缓存速度 >> 远比重新请求快 缓存对象有那些呢 &#xff1f;&#x1f447; 「图片」 「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文…...

终极指南:BepInEx 6.0插件框架如何彻底解决Unity游戏模组开发的稳定性难题

终极指南&#xff1a;BepInEx 6.0插件框架如何彻底解决Unity游戏模组开发的稳定性难题 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一个革命性的Unity游戏插件与模组开…...

TINA-TI仿真实战:从运放振铃到电源设计的电路调试指南

1. 为什么我们需要TINA-TI仿真软件 作为一个在硬件设计领域摸爬滚打多年的工程师&#xff0c;我见过太多因为电路设计问题导致的返工案例。记得有一次&#xff0c;我们团队花了两周时间手工焊接的样机&#xff0c;上电后运放输出端出现了严重的振铃现象&#xff0c;不得不全部拆…...

面试过程中被问懵

高并发内存池中基数数相比哈希表差别&#xff0c;优势在哪相比传统的哈希表&#xff08;Hash Table&#xff09;&#xff0c;基数树在内存管理这种特定场景下具有压倒性的优势。哈希表&#xff08;哈希表&#xff09;逻辑&#xff1a;通过哈希函数将 转换为数组下标。PageID锁定…...

如何在JavaScript中快速生成专业的PowerPoint演示文稿

如何在JavaScript中快速生成专业的PowerPoint演示文稿 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS PptxGenJS是一个功能强大…...

轻量级规则流引擎实践:基于DAG的业务流程编排与解耦

1. 项目概述与核心价值 最近在梳理一些遗留系统的业务流程时&#xff0c;我又一次被那些硬编码在代码里的“if-else”逻辑链折磨得够呛。一个简单的审批流&#xff0c;因为业务规则的细微调整&#xff0c;就需要在多个服务里翻找、修改、测试&#xff0c;牵一发而动全身。这让我…...

告别手工账!用SAP自动记账处理采购价差与发票价差(附MIRO/MIGO操作截图)

SAP自动记账实战&#xff1a;采购价差与发票价差的智能处理方案 1. 采购业务中的价格差异痛点 财务部门每月最头疼的莫过于月底对账时发现采购订单价格、收货价格和发票价格三者不一致。传统手工记账模式下&#xff0c;财务人员需要反复核对采购订单、收货单和发票&#xff0c;…...

CANN asc_copy寄存器搬运API

asc_copy 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com/c…...

蓝桥杯-2026年C++B组省赛

&#xff08;题目来源于洛谷&#xff0c;省一代码分享&#xff09;P16232 [蓝桥杯 2026 省 B] 青春常数题目背景本站蓝桥杯 2026 省赛测试数据均为洛谷自造&#xff0c;与官方数据可能存在差异&#xff0c;仅供学习参考。题目描述小蓝与蓝桥杯的缘分已经走到了第四个年头。从 2…...

LinkedIn内容自动化发布:基于Node.js与Playwright的实战指南

1. 项目概述&#xff1a;为什么我们需要一个LinkedIn帖子自动化工具&#xff1f;如果你在运营个人品牌、管理公司账号&#xff0c;或者从事市场营销、招聘工作&#xff0c;那么对LinkedIn这个平台一定不陌生。它早已不是单纯的求职网站&#xff0c;而是全球最大的职业社交与内容…...

如何3分钟解放你的B站缓存视频?m4s-converter终极转换指南

如何3分钟解放你的B站缓存视频&#xff1f;m4s-converter终极转换指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是不是也遇到过这样的烦…...