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

c语言中的字符串函数

strstr函数

函数介绍

strstr 用于在一个字符串中查找另一个字符串的首次出现。 

我们来看这个函数的参数名字:haysytack(干草堆)needle(针),这个其实就是外国的一句谚语:在干草堆中找一根针,就类似于我们中国的大海捞针一样,很有趣。也在某种程度上对应了这个函数的用途。

示例:

char *s = "abcd.txt";
char *p = strstr(s, ".wps");if(p == NULL)printf("文件[%s]不是WPS文件\n", s);
elseprintf("文件[%s]是WPS文件\n", s);

strchr函数和strrchr函数 

函数介绍

  1. 这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c
  2. strchr() 从左往右找,strrchr() 从右往左找。都是查找某个字符的首次出现
  3. 字符串结束标记 ‘\0’ 被认为是字符串的一部分。

示例:

char *p;p = strchr("www.qq.com", '.'); // 从左到右找到第一个出现的字符'.'
printf("%s\n", p);             // 输出 ".qq.com"p = strrchr("www.qq.com", '.');// 从右到左找到第一个出现的字符'.'
printf("%s\n", p);             // 输出 ".com"

strstr是否可以替代strchr

  • 相似点strstrstrchr 都可以在字符串中查找特定的内容,并返回指向该内容在字符串中位置的指针。
  • 不同点strstr 查找子字符串,而 strchr 查找单个字符。

从技术上讲,你可以用 strstr 来替代 strchr 的功能,因为 strstr 可以查找单个字符组成的子字符串。

虽然 strstr 可以用来查找单个字符组成的字符串,从而实现与 strchr 类似的功能,但在实际应用中,strchr 更加简洁和直接地用于查找单个字符。因此,虽然 strstr 可以囊括 strchr 的功能,但在需要查找单个字符时,通常推荐使用 strchr,以使代码更具可读性和表达力

strlen函数 

函数介绍

示例:

char *s = "www.baidu.com.cn";
printf("百度官网地址的长度是:%d\n", strlen(s));

且我们的是返回字符长度,不是总空间的大小,和sizeof操作符不一样。 

strcmp函数和strncmp

函数介绍

它可以帮助我们比较指针指向的字符串的大小 

  • 比较字符串大小,实际上比较的是字符的 ASCII码值的大小。
  • 从左到右逐个比较两个字符串的每一个字符,当能“决出胜负”时立刻停止比较。

示例 

printf("%d\n", strcmp("abc", "abc")); // 输出0,两个字符串相等
printf("%d\n", strcmp("abc", "aBc")); // 输出1,"abc" 大于 "aBc"
printf("%d\n", strcmp("999", "aaa")); // 输出-1,"999" 小于 "aaa"printf("%d\n", strcmp("abcd", "abce")); // 输出-1,"abcd" 小于 "abce"
printf("%d\n", strcmp("abcd", "abce",3 )); // 输出0,"abcd" 和 "abce"前三个字符一样
    char a[]="abc";char b[]="bc";printf("%d\n", strcmp(a, b)); // 输出-1,a指向的字符串<b指向的字符串//    if(a==b){//这样是不行的,因为这样是比较了我们指针指向的地址的大小是否相等
//        printf("%s","same");
//    }
//    else{
//        printf("%s","not same");
//    }
//手写代码if(*a<*b){printf("%s","a<b");}if(*a>*b){printf("%s","a>b");}if(*a==*b){printf("%s","a==b");}

1.比较字符串并不要求两个字符串一样长。"za">"abcde"       "abc">"ab"

2.strlen可以帮助我们由指针来直接比较指向内容的字符串大小,不用解引用,并且比手写代码比较更加简洁

strtok函数

函数介绍

1.当strtok在参数s的字符串中发现到参数sep的分割字符时则会将该字符改为’\0’字符 

2.在第一次调用时,strtok必须赋予参数str字符串,往后的调用则将参数s设置成NULL,并且要赋予分隔符串,比如分隔符串",; "这里便包含了三个分割符,表示str中的这三种符号都将会被视作分割标识,我们的strtok函数将会将字符串中的这三种符号都换为’\0’。

3.在这里要分割字符串str,我们每次调用strtok的话首先会返回的是指向第一个分割串的指针,调用第二次的话返回的是指向第二个分割串的指针,直到最后返回NULL表示分割完成。

4.strtok会修改原字符串,所以原字符串必须可修改,所以第一个参数不能用指向字符串常量的指针来作为参数,因为字符串常量中的内容不能改变,必须使用字符数组来存储我们要分割的字符串。

示例:将分割好的字符串按行打印

1.这里采用while是非常合适的.

2.这里假如不定义字符数组而是定义了char *s = "abcd,1234,xy;888,666 999",那么将得不到正确的结果,上面也说过了,这个函数必须可以修改原来的字符串。对于字符串常量的话我们对其是不可以修改的。所以这里必须定义的是字符数组。

3.strtok 函数的行为是它会将连续的分隔符视为一个分隔符,而不会返回空的标记。

对于上面的s数组,写成s[]="abcd,,,,1234,xy;888,666  999"这样也是得到相同的结果。

strcat函数和strncat函数(更安全)

函数介绍

  1. 这两个函数的功能,都是将 src 中的字符串,复制拼接到 dest 的末尾。
  2. strcat() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
  3. strncat() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 的末尾

示例:

char s1[10] = "abc";
strcat(s1, "xyz");
printf("%s\n", s1); // 输出 "abcxyz"char s2[10] = "abc";
strcat(s3, "123456789"); // 此处操作内存溢出,可能会发生内存崩溃char s[10]  = "abc";
strncat(s, "123456789", sizeof(s)/sizeof(char)-strlen(s)-1);
printf("%s\n", s); // 输出 "abc123456",两个字符串被拼接到了一起,且不会溢出

1.有时候可能我们使用strcat来拼接了超过实际内存所能存储的字符,我们输出了之后也正常输出,没错误,可能就有侥幸心理,实际上这纯属偶然并且这就相当于埋下了一颗地雷,指不定哪天就出错了,所以更推荐使用strncat这个版本,更加安全。

2.这里拼接操作很显然会改变字符数组存储的数据,所以这里的第一个参数也必须是字符数组,不能是一个字符串常量。

strcpy函数和strncpy函数(更安全)

函数介绍

  1. 这两个函数的功能,都是将 src 中的字符串,复制到 dest 中,dest原本内容被覆盖
  2. strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
  3. strncpy() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 中。

示例:

char s1[5] = "abc";
strcpy(s1, "xyz);
printf("%s\n", s1); // 输出 "xyz",原有的"abc"被覆盖char s2[5] = "abc";
strcpy(s2, "123456789"); // 此处操作内存溢出,可能会发生内存崩溃char s[5] = "abc";
strncpy(s, "123456789", sizeof(s)/sizeof(char)-1);
printf("%s\n", s); // 输出 "1234",有边界保护,不会溢出

1.更推荐使用strncat这个版本,更加安全。

2.这里的第一个参数也必须是字符数组,原因还是这里我们需要对字符数组进行修改,字符串常量是不能被修改的。

相关文章:

c语言中的字符串函数

strstr函数 函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。 我们来看这个函数的参数名字&#xff1a;haysytack&#xff08;干草堆&#xff09;needle&#xff08;针&#xff09;,这个其实就是外国的一句谚语&#xff1a;在干草堆中找一根针&#xff0c;就…...

[AI 大模型] 百度 文心一言

文章目录 [AI 大模型] 百度 文心一言简介模型架构发展新技术和优势API 代码示例 [AI 大模型] 百度 文心一言 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DwAIh0T-1720667576892)(https://i-blog.csdnimg.cn/direct/283919e5d78b4951ba1ade5dcfc…...

机器学习开源分子生成系列(2)-基于三维形状和静电相似性的DeepFMPO v3D安装及使用

前言 本文是基于 3D 的分子生成方法DeepFMPO v3D的介绍及安装使用。 一、DeepFMPO v3D是什么&#xff1f; github代码介绍文章 在药物发现中&#xff0c;如何寻找具新颖性和结构多样性的候选分子是颇受药物设计科学家关注的问题。通过虚拟筛选的化学空间搜索往往会受限于筛选…...

机器学习-16-分布式梯度提升库XGBoost的应用

参考XGBoost库 1 XGBoost分布式梯度提升库 XGBoost,全称为eXtreme Gradient Boosting,是一个优化的分布式梯度提升库,旨在高效、灵活且便携。它在Gradient Boosting框架下实现了机器学习算法,并广泛用于分类、回归和排序任务。XGBoost之所以受到广泛欢迎,主要归功于它的…...

视觉/AIGC面经->多模态

1.ocr检测如何做?qwen的文本检测是否合理? paligemma: <loc0110><loc0124><loc0224><loc0389> plate ; <loc0244><loc0130><loc0281><loc0430> plate ; <loc0364><loc0820><loc0403><loc0951> pl…...

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1986张 标注数量(xml文件个数)&#xff1a;1986 标注数量(txt文件个数)&#xff1a;1986 标注类别数&#xff1a;7 标注类别名称&#xff1a;[crescent gap, silk spot, water spot, weld line, oil spot, punchin…...

EdgeOne安全能力开箱测评挑战赛

活动地址&#xff1a;EdgeOne安全能力开箱测评挑战赛-腾讯云开发者社区-腾讯云 随着网络攻击日益频繁&#xff0c;企业网站面临着数据泄露、DDoS攻击、CC攻击等多种安全威胁。如何有效保护企业网站安全&#xff0c;成为企业IT部门的重要任务。腾讯云EdgeOne作为一款集成了CDN和…...

神经网络识别数字图像案例

学习资料&#xff1a;从零设计并训练一个神经网络&#xff0c;你就能真正理解它了_哔哩哔哩_bilibili 这个视频讲得相当清楚。本文是学习笔记&#xff0c;不是原创&#xff0c;图都是从视频上截图的。 1. 神经网络 2. 案例说明 具体来说&#xff0c;设计一个三层的神经网络。…...

c++包管理器

conan conan search&#xff0c;查看网络库 conan profile detect&#xff0c;生成缓存信息conan new cmake_exe/cmake_lib&#xff0c;创建cmakelists.txtconan install .&#xff0c;执行Conanfile.txt中的配置&#xff0c;生成相关的bat文件 项目中配置Conanfile.txt(或者…...

监控易V7.6.6.15升级详解7,日志分析更高效

随着企业IT系统的日益复杂&#xff0c;日志管理成为了保障系统稳定运行、快速定位问题的重要工具。为了满足广大用户对日志管理功能的更高需求&#xff0c;监控易系统近日完成了重要版本升级&#xff0c;对日志管理功能进行了全面优化和新增。 一、Syslog日志与SnmpTrap日志统…...

HTML表格、表单标签

目录 一、表格 &#xff08;1&#xff09;关于表格中标签说明 &#xff08;2&#xff09;关于表格中属性说明 &#xff08;3&#xff09;简单操作演示 &#xff08;4&#xff09;表格小结 二、表单 &#xff08;1&#xff09;简单操作演示 &#xff08;2&#xff09;注…...

(Windows环境)FFMPEG编译,包含编译x264以及x265

本文使用 MSYS2 来编译 ffmpeg 一、安装MSYS2 MSYS2 是 Windows 下的一组编译套件&#xff0c;它可以在 Windows 系统中模拟 Linux 下的编译环境&#xff0c;如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。 MSYS2 的安装也非常省心&#x…...

notepad++中文出现异体汉字,怎么改正

notepad显示异体字&#xff0c;如何恢复&#xff1f; 比如 “门” 和 “直接” 的"直"字&#xff0c;显示成了 方法 修改字体&#xff0c; 菜单栏选择 Settings(设置&#xff09;&#xff0c;Style Configurator…&#xff08;语言格式设置…&#xff09;&#xf…...

EasyAnimate-v3版本支持I2V及超长视频生成

阿里云人工智能平台&#xff08;PAI&#xff09;自研开源的视频生成项目EasyAnimate正式发布v3版本&#xff1a; 支持 图片&#xff08;可配合文字&#xff09; 生成视频 支持 上传两张图片作为起止画面 生成视频 最大支持720p&#xff08;960*960分辨率&#xff09; 144帧视…...

最新PHP自助商城源码,彩虹商城源码

演示效果图 后台效果图 运行环境&#xff1a; Nginx 1.22.1 Mysql5.7 PHP7.4 直接访问域名即可安装 彩虹自助下单系统二次开发 拥有供货商系统 多余模板删除 保留一套商城,两套发卡 源码无后门隐患 已知存在的BUG修复 彩虹商城源码&#xff1a;下载 密码:chsc 免责声明&…...

Vue2打包部署后动态修改后端接口地址的解决方法

文章目录 前言一、背景二、解决方法1.在public文件夹下创建config文件夹&#xff0c;并创建config.js文件2.编写config.js内容3.在index.html中加载config.js4.在封装axios工具类的js中修改配置 总结 前言 本篇文章将介绍使用Vue2开发前后端分离项目时&#xff0c;前端打包部署…...

【后端开发实习】用MongoDB实现仓库管理的出库入库实战

用MongoDB实现仓库管理的出库入库 MongoDB什么是MongoDBMongoDB安装以及开始运行配置启动以及mongoshmongodb的基础使用命令启动和使用MongoDB服务数据库操作集合操作文档操作 项目部署在数据库中创建一张商品信息表提供信息表的增删改查操作接口 MongoDB 什么是MongoDB Mong…...

内网信息收集——用户凭据窃取

文章目录 一、获取域内单机密码和hash1.1 在线读取lsass进程内存1.2 离线读取lsass.exe进程内存1.3 在线读取本地SAM文件1.4 离线读取本地SAM文件 二、域hash获取三、windows凭据导出 一、获取域内单机密码和hash 在windows中&#xff0c;SAM文件是windows用户的账户数据库&am…...

组串式逆变器散热分析

1 引言 组串式逆变器散热方式主要有强制风冷和自然冷却两种&#xff0c;针对两种散热方式的实际效果&#xff0c;笔者抽取了不同厂家不同散热方式的两款组串式逆变器进行实验对比&#xff0c;发现在同样的环境温度下&#xff0c;强制风冷的逆变器内部环境温度及核心器件温升比…...

WEB07Vue+Ajax

1. Vue概述 Vue&#xff08;读音 /vjuː/, 类似于 view&#xff09;&#xff0c;是一款用于构建用户界面的渐进式的JavaScript框架&#xff08;官方网站&#xff1a;https://cn.vuejs.org&#xff09;。 在上面的这句话中呢&#xff0c;出现了三个词&#xff0c;分别是&#x…...

基于Petri网与机器学习的等离子体化学反应网络简化方法

1. 项目概述与核心挑战在等离子体化学和化学工程领域&#xff0c;我们常常面对一个令人头疼的难题&#xff1a;一个看似简单的物理过程&#xff0c;背后却隐藏着成百上千个相互耦合的化学反应。就拿低温等离子体合成氨&#xff08;NH₃&#xff09;这个经典案例来说&#xff0c…...

开源机器学习项目贡献者角色演化与社区健康度分析

1. 开源机器学习项目中的贡献者角色&#xff1a;一个动态的生态系统在开源软件的世界里&#xff0c;尤其是像TensorFlow、PyTorch这样的机器学习&#xff08;ML&#xff09;库&#xff0c;项目的生命力并非仅仅源于几行精妙的代码&#xff0c;而是根植于一个由多元角色构成的、…...

别再忍受模糊界面了!Windows 10/11下拯救老旧软件的DPI兼容性设置保姆级教程

高分辨率屏幕救星&#xff1a;彻底解决Windows老旧软件显示模糊的终极指南当你在4K显示器上打开心爱的老版Photoshop时&#xff0c;那些本该清晰的工具栏图标却像被打了马赛克&#xff1b;运行经典游戏时&#xff0c;界面文字错位得像是抽象艺术——这不是你的电脑出了问题&…...

从金融风控到工业质检:MAD离群值检测算法的5个实战应用场景与Python代码

从金融风控到工业质检&#xff1a;MAD离群值检测算法的5个实战应用场景与Python代码在数据驱动的商业决策中&#xff0c;异常值往往蕴含着关键的业务信号——可能是欺诈交易、设备故障&#xff0c;或是市场机会。传统基于标准差的方法容易受极端值影响&#xff0c;而**中位数绝…...

别再乱改注册表了!Windows系统文件夹移动后还原的完整避坑指南

Windows系统文件夹移动后还原的完整避坑指南1. 为什么你的文件夹移动操作会出问题&#xff1f;许多用户为了释放C盘空间&#xff0c;会选择将桌面、文档等系统文件夹移动到其他分区。这个看似简单的操作背后却隐藏着不少陷阱。最常见的错误是直接在目标盘符下选择移动&#xff…...

基于RNN的数字-实体关系抽取:从非结构化文本中提取结构化信息

1. 项目概述与核心价值在信息爆炸的时代&#xff0c;我们每天都会接触到海量的非结构化文本&#xff0c;比如医学文献、金融报告、新闻资讯。这些文本中蕴含着大量有价值的结构化信息&#xff0c;例如“患者平均年龄67.6岁”、“手术成功率为38%”、“公司营收增长15%”。传统上…...

Midjourney火焰生成实战手册(含17组已验证火纹Prompt+SDXL对比基准数据)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Midjourney火焰生成的核心原理与技术边界 Midjourney 并不原生支持“火焰生成”这一独立功能&#xff0c;其图像合成能力完全依赖于文本提示&#xff08;prompt&#xff09;对扩散模型隐空间的引导。所谓“火…...

【小白快速上手】Windows 系统 OpenClaw v2.7.5 一键部署完整教程(包含安装包)

OpenClaw 一键安装完整教程&#xff08;2026 最新&#xff09; 适配系统&#xff1a;Windows10/11 64 位当前版本&#xff1a;v2.7.5&#xff08;虾壳云版&#xff09;文件大小&#xff1a;约 58.7MB下载地址&#xff1a;https://xiake.yun/api/download/package/16?promoCod…...

FairyGUI GLoader动效动态接管与运行时替换实战

1. 这不是简单的“换图”&#xff0c;而是动效资源的动态接管机制在 FairyGUI for Unity 项目里&#xff0c;当你看到GLoader组件上挂着一个.png或.jpg&#xff0c;心里默认它就是张静态图——但一旦你给它赋值一个MovieClip、GAnimation&#xff0c;甚至是一段从 AssetBundle …...

ShiroAttack2实战指南:从漏洞检测到内存马注入的完整揭秘

ShiroAttack2实战指南&#xff1a;从漏洞检测到内存马注入的完整揭秘 【免费下载链接】ShiroAttack2 shiro反序列化漏洞综合利用,包含&#xff08;回显执行命令/注入内存马&#xff09;修复原版中NoCC的问题 https://github.com/j1anFen/shiro_attack 项目地址: https://gitc…...