常见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 布局中,使用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)是一种虚拟局域网技术,它可以将一个物理局域网划分为多个逻辑上的虚拟局域网。 基于交换式以太网的虚拟局域网在交换式以太网中,利用VLAN技术,可以将由交换机连接成的物理网络划分成多个…...
双亲委派(JVM)
1.双亲委派 在 Java 中,双薪委派通常是指双亲委派模型,它是 Java 类加载器的一种工作模式,用于确保类加载的安全性和一致性。以下是其相关介绍: 定义与作用 定义:双亲委派模型要求除了顶层的启动类加载器外…...
第二十一章:考研的艰难抉择与放弃入学的转折
深秋时节,校园宛如被大自然精心雕琢的艺术殿堂。金黄的银杏叶在阳光的轻抚下,闪烁着细碎的光芒,微风拂过,叶片相互摩挲,发出沙沙的轻响,仿佛在低声诉说着岁月的故事。一片片银杏叶悠悠然飘落,宛…...
webpack配置之---output.chunkLoading
output.chunkLoading webpack.output.chunkLoading 配置项用于指定 Webpack 如何加载异步 chunk(即按需加载的代码块)。在现代 Webpack 版本中,异步代码分割成为了非常常见的功能,chunkLoading 配置项就用于控制 Webpack 加载这些…...
升级RAG应用程序与Redis向量库
Redis Vector Library (RedisVL) 简化AI应用开发 几个月前,Redis推出了Redis向量库(RedisVL),以简化人工智能(AI)应用的开发。自那时起,我们引入了强大的新功能,支持大规模的语言模…...
【starrocks学习】之将starrocks表同步到hive
目录 方法 1:通过HDFS导出数据 1. 将StarRocks表数据导出到HDFS 2. 在Hive中创建外部表 3. 验证数据 方法 2:使用Apache Spark同步 1. 添加StarRocks和Hive的依赖 2. 使用Spark读取StarRocks数据并写入Hive 3. 验证数据 方法 3:通过…...

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

LMM-3DP:集成 LMM 规划器和 3D 技能策略实现可泛化操作
25年1月来自UCSD的论文“Integrating LMM Planners and 3D Skill Policies for Generalizable Manipulation”。 大型多模态模型 (LMM) 的视觉推理能力和 3D 特征场语义丰富性的最新进展,拓展了机器人能力的范围。这些发展对于弥合 LMM 高级推理与利用 3D 特征场低…...

Linux——基础命令3
1、关机重启命令 reboot指令 作用:重启计算机 语法:reboot shutdown指令 作用:关机 语法:shutdown -h 时间 时间常见的值: now (立即关机) m(m表示minutes数字)eg&…...

ChatGPT提问技巧:行业热门应用提示词案例-文案写作
ChatGPT 作为强大的 AI 语言模型,已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案,关键在于如何与它“沟通”,也就是如何设计提示词(Prompt)。以下是一些实用的提示词案例,帮助你解锁 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)实体类复杂查询(一对一)实体类转换器测试代码一对多关系 什么是r2dbc 反应式关系数据库连接(R2DBC)项目为关系数据库…...
嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
2025年,全球AI领域最震撼的突破并非来自算力堆叠的超级模型,而是中国团队DeepSeek通过开源策略,推动大模型向微型化、低功耗场景的跨越。相对于当人们还在讨论千亿参数模型的训练成本被压缩到600万美金而言,被称作“核弹级别”的操…...

基于遗传算法的64QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): GA优化过程: 优化前后星座图对比: (优化后…...

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

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...