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

常见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 中第一个匹配…...

单例模式几种实现

静态内部类holder实现(推荐) public class UniqueIdGenerator {public static final UniqueIdGenerator INSTANCE Holder.INSTANCE;// Private holder class for lazy initializationprivate static class Holder {static final UniqueIdGenerator INS…...

android中关于CheckBox自定义选中图片选中无效问题

在android xml 布局中&#xff0c;使用CheckBox控件设置选中背景图代码如下 <CheckBoxandroid:layout_width"wrap_content"android:layout_height"wrap_content"android:button"drawable/dfrd_common_selecotr_check"android:paddingStart&q…...

虚拟局域网之详解(Detailed Explanation of Virtual Local Area Network)

虚拟局域网之详解 VLAN (virtual localArea network)是一种虚拟局域网技术&#xff0c;它可以将一个物理局域网划分为多个逻辑上的虚拟局域网。 基于交换式以太网的虚拟局域网在交换式以太网中&#xff0c;利用VLAN技术&#xff0c;可以将由交换机连接成的物理网络划分成多个…...

双亲委派(JVM)

1.双亲委派 在 Java 中&#xff0c;双薪委派通常是指双亲委派模型&#xff0c;它是 Java 类加载器的一种工作模式&#xff0c;用于确保类加载的安全性和一致性。以下是其相关介绍&#xff1a; 定义与作用 定义&#xff1a;双亲委派模型要求除了顶层的启动类加载器外&#xf…...

第二十一章:考研的艰难抉择与放弃入学的转折

深秋时节&#xff0c;校园宛如被大自然精心雕琢的艺术殿堂。金黄的银杏叶在阳光的轻抚下&#xff0c;闪烁着细碎的光芒&#xff0c;微风拂过&#xff0c;叶片相互摩挲&#xff0c;发出沙沙的轻响&#xff0c;仿佛在低声诉说着岁月的故事。一片片银杏叶悠悠然飘落&#xff0c;宛…...

webpack配置之---output.chunkLoading

output.chunkLoading webpack.output.chunkLoading 配置项用于指定 Webpack 如何加载异步 chunk&#xff08;即按需加载的代码块&#xff09;。在现代 Webpack 版本中&#xff0c;异步代码分割成为了非常常见的功能&#xff0c;chunkLoading 配置项就用于控制 Webpack 加载这些…...

升级RAG应用程序与Redis向量库

Redis Vector Library (RedisVL) 简化AI应用开发 几个月前&#xff0c;Redis推出了Redis向量库&#xff08;RedisVL&#xff09;&#xff0c;以简化人工智能&#xff08;AI&#xff09;应用的开发。自那时起&#xff0c;我们引入了强大的新功能&#xff0c;支持大规模的语言模…...

【starrocks学习】之将starrocks表同步到hive

目录 方法 1&#xff1a;通过HDFS导出数据 1. 将StarRocks表数据导出到HDFS 2. 在Hive中创建外部表 3. 验证数据 方法 2&#xff1a;使用Apache Spark同步 1. 添加StarRocks和Hive的依赖 2. 使用Spark读取StarRocks数据并写入Hive 3. 验证数据 方法 3&#xff1a;通过…...

HTML应用指南:利用GET请求获取全国盒马门店位置信息

随着新零售业态的发展,门店位置信息的获取变得至关重要。作为新零售领域的先锋,盒马鲜生不仅在商业模式创新上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。本篇文章,我们将继续探究GET请求的实际应用,我们使用Python的requests库通过GET请求,从盒马…...

openEuler部署 sysstat工具

查看环境 [rootlocalhost lxm]# cat /etc/os-release NAME"openEuler" VERSION"23.09" ID"openEuler" VERSION_ID"23.09" PRETTY_NAME"openEuler 23.09" ANSI_COLOR"0;31"查看 yum 源 [rootlocalhost lxm]# he…...

使用 Three.js 实现炫酷的除夕烟花特效

1&#xff0c;前言 在除夕夜&#xff0c;璀璨的烟花点亮夜空&#xff0c;为节日增添了浓厚的喜庆氛围。在 Web 端&#xff0c;我们可以使用 Three.js 来模拟这种美轮美奂的烟花特效&#xff0c;让网页也能展现绚丽的节日气息。本文将介绍如何利用 Three.js 及其着色器技术&…...

LMM-3DP:集成 LMM 规划器和 3D 技能策略实现可泛化操作

25年1月来自UCSD的论文“Integrating LMM Planners and 3D Skill Policies for Generalizable Manipulation”。 大型多模态模型 (LMM) 的视觉推理能力和 3D 特征场语义丰富性的最新进展&#xff0c;拓展了机器人能力的范围。这些发展对于弥合 LMM 高级推理与利用 3D 特征场低…...

Linux——基础命令3

1、关机重启命令 reboot指令 作用&#xff1a;重启计算机 语法&#xff1a;reboot shutdown指令 作用&#xff1a;关机 语法&#xff1a;shutdown -h 时间 时间常见的值&#xff1a; now &#xff08;立即关机&#xff09; m&#xff08;m表示minutes数字&#xff09;eg&…...

ChatGPT提问技巧:行业热门应用提示词案例-文案写作

ChatGPT 作为强大的 AI 语言模型&#xff0c;已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案&#xff0c;关键在于如何与它“沟通”&#xff0c;也就是如何设计提示词&#xff08;Prompt&#xff09;。以下是一些实用的提示词案例&#xff0c;帮助你解锁 ChatG…...

python - 封装moondream(备份)

目录 一、 moondream封装成类 二、moondream封装成http api 一、 moondream封装成类 # moondream_model.py #https://github.com/vikhyat/moondream?tab=readme-ov-fileimport moondream as md from PIL import Imageclass MoondreamModel:def __init__(self, model_path):…...

响应式编程库(三) -r2dbc

r2dbc整合 什么是r2dbc版本选择简单试用整合springbootDatabaseClient 进行查询使用Repository接口(对应mapper)实体类复杂查询&#xff08;一对一&#xff09;实体类转换器测试代码一对多关系 什么是r2dbc 反应式关系数据库连接&#xff08;R2DBC&#xff09;项目为关系数据库…...

嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?

2025年&#xff0c;全球AI领域最震撼的突破并非来自算力堆叠的超级模型&#xff0c;而是中国团队DeepSeek通过开源策略&#xff0c;推动大模型向微型化、低功耗场景的跨越。相对于当人们还在讨论千亿参数模型的训练成本被压缩到600万美金而言&#xff0c;被称作“核弹级别”的操…...

基于遗传算法的64QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; GA优化过程&#xff1a; 优化前后星座图对比&#xff1a; &#xff08;优化后…...

从零开始玩转Docker:轻松开启容器化之旅

一、什么是 Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。简单来说&#xff0c;Docker 就像是一个超级 “快递箱”&#xff0c…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...