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

常见string库中的函数(C语言超详细)

文章目录

  • strcspn
  • strcpy
  • strncpy
  • strcat
  • strncat
  • strcmp
  • strncmp
  • strchr
  • strrchr
  • strstr
  • strtok
  • strlen
  • strnlen

strcspn

原型:

size_t strcspn(const char *str1, const char *str2);

功能:

strcspn 会扫描 str1,并返回一个整数,表示 str1 中第一个匹配 str2 中任意字符的位置(从 0开始计数)。如果没有匹配的字符,返回 str1 的长度

注意事项

空字符集:如果 str2 为空字符串,返回 str1 的长度。
无匹配字符:如果 str1 中没有任何字符与 str2 匹配,返回 str1的长度。
按顺序匹配:str2 中的字符按顺序匹配 str1 中的字符,找到第一个匹配即可

strcpy

原型:

char* strcpy(char* dest, const char* src);

功能:

strcpy函数将src字符串(包括终止的空字符’\0’)复制到dest所指向的内存区域。

注意事项:

确保dest有足够的空间来容纳src字符串,包括终止的空字符,否则会导致缓冲区溢出。 src和dest不能指向相同的内存区域。

strncpy

原型:

char* strncpy(char* dest, const char* src, size_t n);

功能:

strncpy函数将src字符串的前n个字节复制到dest所指向的内存区域。如果src字符串的长度小于n,则剩余的字节用空字符’\0’填充。

注意事项:

如果src字符串的长度大于或等于n,dest可能不会以空字符终止,这可能导致后续操作出现问题。
使用strncpy时需要特别小心,确保dest字符串以空字符终止。

strcat

原型:

char* strcat(char* dest, const char* src);

功能:

strcat函数将src字符串(包括终止的空字符’\0’)追加到dest字符串的末尾。

注意事项:

确保dest有足够的空间来容纳追加的src字符串,包括终止的空字符,否则会导致缓冲区溢出。 dest必须是一个空终止的字符串。

strncat

原型:

char* strncat(char* dest, const char* src, size_t n);

功能:

strncat函数将src字符串的前n个字节追加到dest字符串的末尾,并确保dest以空字符终止。

注意事项:

如果src字符串的长度小于n,dest将包含src的所有字符,并以空字符终止。
如果src字符串的长度大于或等于n,dest将包含src的前n个字节,并以空字符终止。

strcmp

原型:

int strcmp(const char* str1, const char* str2);

功能:

strcmp函数比较两个字符串str1和str2,按照字典顺序返回比较结果。

返回值小于0表示str1小于str2
返回值等于0表示str1等于str2
返回值大于0表示str1大于str2

注意事项:

比较是基于字符的ASCII值。
比较直到遇到第一个不匹配的字符或遇到空字符’\0’。

strncmp

原型:

int strncmp(const char* str1, const char* str2, size_t n);

功能:

strncmp函数比较两个字符串str1和str2的前n个字节,按照字典顺序返回比较结果。

返回值小于0表示str1的前n个字节小于str2的前n个字节
返回值等于0表示str1的前n个字节等于str2的前n个字节
返回值大于0表示str1的前n个字节大于str2的前n个字节

注意事项:

比较的是前n个字节,不考虑字符串的实际长度。 如果n为0,返回0。

strchr

原型:

char* strchr(const char* str, int ch);

功能:

strchr函数在字符串str中查找第一个等于ch的字符,并返回指向该字符的指针。如果未找到,返回NULL。

注意事项:

ch参数是一个int,但实际上只使用其最低字节,并且被转换为unsigned char进行比较。 查找包括字符串的终止空字符’\0’。

strrchr

原型:

char* strrchr(const char* str, int ch);

功能:

strrchr函数在字符串str中查找最后一个等于ch的字符,并返回指向该字符的指针。如果未找到,返回NULL。

注意事项:

ch参数同strchr。 同样包括字符串的终止空字符’\0’。

strstr

原型:

char* strstr(const char* haystack, const char* needle);

功能:

strstr函数在字符串haystack中查找第一个出现的子字符串needle,并返回指向该子字符串起始位置的指针。如果未找到,返回NULL。

注意事项:

查找是基于字节的精确匹配。 needle可以是空字符串,此时返回haystack本身。

strtok

原型:

char* strtok(char* str, const char* delim);

功能:

strtok函数用于将字符串str分割为多个 tokens,根据delim参数指定的分隔符。

使用方法:

第一次调用strtok时,str指向要分割的字符串,delim指定分隔符。
后续调用strtok时,str设为NULL,继续从前一次返回的位置开始分割。

注意事项:

strtok修改原始字符串,在字符串中插入空字符’\0’来分割tokens。
不是线程安全的,因为它使用静态变量保存状态。

strlen

原型:

size_t strlen(const char* str);

功能:

strlen函数计算字符串str的长度,不包括终止的空字符’\0’。

注意事项:

直到遇到第一个空字符’\0’才停止计数。 如果字符串没有终止的空字符,行为未定义。

strnlen

原型:

size_t strnlen(const char* str, size_t maxlen);

功能:

strnlen函数计算字符串str的长度,最多检查maxlen个字节,返回实际的长度,不包括终止的空字符’\0’。

注意事项:

如果在maxlen字节内找不到空字符’\0’,返回maxlen。
这是一个安全的版本,避免了潜在的缓冲区溢出。

相关文章:

常见string库中的函数(C语言超详细)

文章目录 strcspnstrcpystrncpystrcatstrncatstrcmpstrncmpstrchrstrrchrstrstrstrtokstrlenstrnlen strcspn 原型: size_t strcspn(const char *str1, const char *str2);功能: strcspn 会扫描 str1,并返回一个整数,表示 str1 中第一个匹配…...

AI安全最佳实践:AI应用开发安全评估矩阵(上)

生成式AI开发安全范围矩阵简介 生成式AI目前可以说是当下最热门的技术,吸引各大全球企业的关注,并在全球各行各业中带来浪潮般的编个。随时AI能力的飞跃,大语言模型LLM参数达到千亿级别,它和Transformer神经网络共同驱动了我们工…...

deepseek+kimi自动生成ppt

打开deepseek官网,输入详细的需求,让他生成个ppt 接着deepseek开始思考生成了 接着复制生成了的内容 打开kimi粘贴刚才deepseek生成的内容 可以一键生成啦,下载编辑使用吧...

# C指针地址CUP寄存器访问IO内存映射

C指针地址&CUP寄存器访问&IO内存映射 在裸机编程中,C语言可以像汇编语言一样直接操作芯片寄存器地址进行读取和写入,主要是由于以下几个原因: 1. 裸机环境下没有操作系统的干预 裸机编程是指直接在硬件上运行程序,没有…...

《薄世宁医学通识50讲》以医学通识为主题,涵盖了医学的多个方面,包括医学哲学、疾病认知、治疗过程、医患关系、公共卫生等

《薄世宁医学通识50讲》是一门由薄世宁医生主讲的医学通识课程,该课程旨在通过深入浅出的方式,向广大听众普及医学知识,提升公众对医学的认知和理解。 晓北斗推荐-薄世宁医学通识 以下是对该课程的详细介绍: 一、课程概述 《薄世…...

突破与重塑:逃离Java舒适区,借Go语言复刻Redis的自我突破和成长

文章目录 写在文章开头为什么想尝试用go复刻redis复刻redis的心路历程程序员对于舒适区的一点看法关于mini-redis的一些展望结语 写在文章开头 在程序员的技术生涯长河中,我们常常会在熟悉的领域中建立起自己的“舒适区”。于我而言,Java 就是这片承载…...

解决_ssl.so: cannot open shared object file: No such file or directory

背景: 我在CentOS8.2的操作系统里安装完python2.7后,源码安装了OpenSSL_1_1_1-stable 下载地址: https://github.com/openssl/openssl/tree/OpenSSL_1_1_1-stable 现象: 结果python导入ssl的时候报错了,报找不到_ssl.…...

优惠券平台(一):基于责任链模式创建优惠券模板

前景概要 系统的主要实现是优惠券的相关业务,所以对于用户管理的实现我们简单用拦截器在触发接口前创建一个单一用户。 // 用户属于非核心功能,这里先通过模拟的形式代替。后续如果需要后管展示,会重构该代码 UserInfoDTO userInfoDTO new…...

【Pytorch实战教程】PyTorch中的Dataset用法详解

PyTorch中的Dataset用法详解 在深度学习中,数据是模型训练的基石。PyTorch作为一个强大的深度学习框架,提供了丰富的工具来处理和加载数据。其中,Dataset类是PyTorch中用于处理数据的重要工具之一。本文将详细介绍Dataset的用法,帮助你更好地理解和使用它。 1. 什么是Dat…...

单例设计模式(Java)

(部分内容参考于菜鸟教程当中关于单例模式的说明) 什么是单例设计模式? 单例模式(Singleton Pattern)是一种常见的设计模式,其主要目的是确保一个类在系统中只有一个实例,并提供全局访问点。使…...

TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...

全文链接:https://tecdat.cn/?p39656 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现,通过MNIST和Blobs等数据集进行实验,对比了不同训练方式(仅源域训练、域对抗训练等&am…...

09vue3实战-----引入element-plus组件库中的图标

09vue3实战-----引入element-plus组件库中的图标 1.安装2.引入3.优化 element-plus中的icon图标组件的使用和其他平台组件(如el-button按钮)是不一样的。 1.安装 npm install element-plus/icons-vue2.引入 在这我们只讲述最方便的一种引入方法------完整引入。这需要从elem…...

DeepSeek vs. ChatGPT:不同的诞生时间,对人工智能发展的不同影响

DeepSeek vs. ChatGPT:不同的诞生时间,对人工智能发展的不同影响 ChatGPT 和 DeepSeek 诞生于不同的时间节点,代表了人工智能不同阶段的发展方向。它们在技术、应用以及对AI发展趋势的影响方面各有侧重。 1. 诞生时间与背景 ChatGPT&#x…...

如何导入第三方sdk | 引入第三方jar 包

0. 背景1. 上传私有仓库2. 使用本地文件系统 0. 背景 对接一些第三方功能,会拿到第三方的sdk,也就是jar包,如何导入呢 1. 上传私有仓库 最好的方式就是将第三方jar包,上传到私有的仓库,这样直接正常在pom引用即可如果只…...

消费电子产品中的噪声对TPS54202的影响

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、概述 在白色家电领域,降压转换器的应用非常广泛,为了实现不同的功能就需要不同的电源轨。TPS542…...

[Meet DeepSeek] 如何顺畅使用DeepSeek?告别【服务器繁忙,请稍后再试。】

文章目录 [Meet DeepSeek] 如何顺畅使用DeepSeek?告别【服务器繁忙,请稍后再试。】引言使用渠道一:硅基流动 Chatbox AI【推荐】硅基流动 Chatbox AI的优势 使用渠道二:秘塔AI搜索秘塔AI搜索的优势 其它方案1. DeepSeek官网2. 纳…...

Websocket从原理到实战

引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,它使得客户端和服务器之间能够进行实时、双向的通信,既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…...

学习Cherry Studio AI服务平台,主要是各种功能的实践(deepseek 1.5b和7b的模型+ChatGLM3模型)

Cherry Studio 介绍 Cherry Studio 是一个支持多模型服务的桌面客户端,为专业用户而打造,内置 30 多个行业的智能助手,帮助用户在多种场景下提升工作效率。 CherryStudio内置众多服务商 同时也支持其他兼容OpenAI/Anthropic等API格式的服务…...

【实用教程】在 Android Studio 中连接 MuMu 模拟器

MuMu 模拟器是一个非常流行的安卓模拟器,特别适合开发人员进行应用测试,我使用它的根本原因在于Android Studio自带的AVM实现是太难用了,但是Mumu模拟器启动以后不会自动被Android Studio识别到,但是其他模拟器都是能够正常被Andr…...

Linux 系统搭建 Python 开发环境全流程

Linux 系统搭建 Python 开发环境全流程 Python 解释器下载 Pycharm 对应版本解压安装包进入解压后的目录启动 Pycharm创建桌面快捷方式(可选)Pycharm 配置创建第一个目录第一个程序运行补充 Python 解释器 确保电脑里已经有了python解释器,没…...

VUE小技能:通过 Prop 向子组件传递数据

文章目录 引言Props 声明Prop 校验更改 prop引言 一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是透传 attribute。所有 prop 默认都是可选的,除非声明了 required: true。Props 声明 在使用 <script setup> 的单文件组件中,p…...

第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)

简单来说&#xff0c; Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类&#xff0c;旅客(线程)分别手持登机牌和身份证接受工作人员的检查&#xff0c;示例代码如所示。…...

AtCoder Beginner Contest 392(A-G)题解

A-B&#xff1a;略 C&#xff1a;可能题意比较绕&#xff0c;第i个答案就是穿着i这个号码&#xff08;也就是Q[j] i,这个时候j这个位置&#xff09;&#xff0c;看向的那个人的号码&#xff08;也就是P[j]) 代码&#xff1a; void solve() {int n;cin >> n;vi p(n 1…...

如何在macOS上安装Ollama

安装Ollama 安装Ollama的步骤相对简单&#xff0c;以下是基本的安装指南&#xff1a; 访问官方网站&#xff1a;打开浏览器&#xff0c;访问Ollama的官方网站。 下载安装包&#xff1a;根据你的操作系统&#xff0c;选择相应的安装包进行下载。 运行安装程序&#xff1a;下载完…...

【Redisson分布式锁】基于redisson的分布式锁

redisson分布式锁 maven文件&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.3</version></dependency>实现代码&#xff1a; 分布式锁对象参…...

【区块链】区块链密码学基础

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...

NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案

产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO&#xff08;低压差线性稳压器&#xff09;&#xff0c;专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V&#xff0c;最大输出电流达 450mA&#xff0c;具备超低静态电流&#xf…...

【Pycharm+Git+Gitlab】安装部署(粗糙版)

1、安装Git 2、安装Pycharm&#xff08;这里选择的是社区版&#xff09; 3、桌面右键打开Git Bash 1&#xff09;设置全局用户名&#xff08;准备连接的Gitlab仓库的访问用户名&#xff09; git config ---global user.name "username"2&#xff09;设置全局邮箱&…...

位运算算法篇:进入位运算的世界

位运算算法篇&#xff1a;进入位运算的世界 本篇文章是我们位运算算法篇的第一章&#xff0c;那么在我们是算法世界中&#xff0c;有那么多重要以及有趣的算法&#xff0c;比如深度优先搜索算法以及BFS以及动态规划算法等等&#xff0c;那么我们位运算在这些算法面前相比&#…...

.net一些知识点5

1.dot Net带out的参数如何使用 string name;//假设这个参数带out TestMethod(1,out name);//一定要有out 方法体中&#xff0c;一定要有out参数的赋值&#xff0c;并且能输出 2.参数的传递方式有哪些 a.值传递 b.引用传递 ref c.输出传递 out 3.设计模式知道哪些 3.us…...