C语言字符串函数strstr、strtok和strerror

1.strstr函数

函数作用:

    在字符串1中查找是否存在字符串2。

例子:

"bbc"中找”bc“

函数定义:

const char * strstr ( const char * str1, const char * str2 );
  • str1字符串1的首字符的指针。
  • str2字符串2的首字符的指针。
  • const修饰是因为只用于查找,不做修改,防止写错误代码。

函数返回值:

        如果为真则返回字符串2在字符串1首次出现的地址,如果为假则不存在返回NULL(空指针)

模拟实现:

const char* my_strstr(const char* str1, const char* str2)
{//如果*str2指向的为空就返回str1if(!*str)return str1;const char* p1 = NULL;//临时指针变量const char* p2 = NULL;while (*str1)//遍历每个字符,结束条件'\0'{//如果遇到相等,就像后判断if (*str1 == *str2){//使用中间指针去判断,防止str1和str2的起始位置丢失p1 = str1;p2 = str2;//判断是否相等,相等就继续向下判断while (*p1 == *p2 && *p1 != '\0' && *p2 != '\0'){p1++;p2++;}//如果此时p2=='\0',就说明找到了if (*p2 == '\0')return str1;//如果*p1=='\0',*p2!='\0'就说明长度不够了,找不到了if (*p1 == '\0')return NULL;}str1++;}return NULL;
}

 

2.strtok函数

函数作用:

通过指定的分隔符切割字符串

例子:

'.'切割"bbc.bcc"

 函数定义:

char * strtok ( char * str, const char * delimiters );
  • str需要被切割的字符串的首地址,如果是第一次被切割则为字符串的首地址,如果不是第一次则是NULL空地址(函数会在切割后保留切割符出现的地址)。
  •  delimiters是分隔符/切割符,可以是单个分割符的地址,也可以是分割符集合(字符串)的首地址。

函数返回值:

        如果存在分隔符,则函数返回切割后字符的首地址,如果不存在,则返回空指针NULL。

函数的使用:

  • 此函数在切割个同意字符串时,第一次使用时,需要传字符串的地址,在这之后则不需要传地址了,函数在每一次切割后都会记住分隔符出现的位置,下次调用时只需传空指针NULL,函数就会根据记忆的地址向后切割。
  • 函数再切割之后会在切割符处换上'\0',然后返回字符串的起始地址。
  • 函数在切割时会对字符串进行操作,为避免对原字符串进行操作,在操作前拷贝一份,来进行操作。

3.strerror函数

函数作用:

  • 在不同的操作系统和C语言标准库中会规定一些错误码,一般都是放在errno.h这个头文件中说明。
  • 在程序运行时,会生成变量errno来记录程序出现错误时的错误码,在程序启动时为0,当调用库函数出现错误时就会将对应的错误码放在errno中,而错误码不能表示错误信息,这时候就需要strerror函数。
  • 函数通过错误码把错误信息字符串的首地址返回出来。

例子:

通过错误码返回的字符指针进行打印错误信息

函数定义:

char * strerror ( int errnum );
  • errnum错误码
  • char* 错误码对应的错误信息的字符串的地址

perror函数:

 perror函数使用打印错误信息,函数参数为错误信息的首地址,返回为空,一般设为满足错误条件时就会调用perror函数打印,那么起始perror函数就是printf函数+strerror函数。


本章内容结束,下章见,拜拜!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024/03/16----面试中遇到的一些面试题

1.请简单的说一下IOC,AOP 1.1 IOC 控制反转(IOC)是一种设计思想,就是将原本在程序中需要手动创建对象,现在交由Spring管理创建,从而降低代码之间的耦合度。 IoC 最常见以及最合理的实现方式叫做依赖注入…

ICANN备稿时debug遇到的问题

包问题 装包:先用fastai出现单击没有跳转的情况:安装pylance即可出现了用pip3 uninstall后pip3 list还有原来的numpy,然后用conda uninstall之后就行了。pip, pip3, conda这几个来回用。 精度问题 打印tensor数组自动保留后四位:…

threejs案例,与静态三角形网格的基本碰撞, 鼠标环顾四周并投球游戏

创建一个时钟对象: const clock new THREE.Clock();这行代码创建了一个新的THREE.Clock对象,它用于跟踪经过的时间。这在动画和物理模拟中很有用。 2. 创建场景: const scene new THREE.Scene();这行代码创建了一个新的3D场景。所有的物体(如模型、灯…

git问题列表(一)(持续更新中~~~)

文章目录 问题1:如何在本地创建git仓库,并推送到远程仓库?问题2:如何创建本地分支,并基于其创建远程分支?问题3:报错“origin does not appear to be a git repository”是什么原因?…

如何在Ubuntu中查看编辑lvgl的demo和examples?

如何在Ubuntu中查看编辑lvgl的demo和examples? 如何在 Ubuntu系统中运行查看lvgl 1、拉取代码 在lvgl的github主页面有50多个仓库,找到lv_port_pc_eclipse这个仓库,点进去 拉取仓库代码和子仓库代码 仓库网址:https://github…

【php基础】输出、变量、

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量 1. 输出 echo: 输出 print: 输出,输出成功返回1 print_r(): 输出数组 var_dump(): 输出数据的详细信息,带有数据类型和数…

矩阵中移动的最大次数

文章目录 所属专栏:BFS算法 题目链接 思路如下: 1.首先我们需要从第一列开始遍历,寻找每一个都能够满足条件的位置,将它插入到数组里面 2.第一列遍历完了后我们先判断第一列的数是否都满足条件插入到数组里面,如果数组为空&#…

智障版本GPT3实现

背景,实现GPT3,采用python代码。调库hf及tf2.0+基础。 由于完全实现GPT模型及其预训练过程涉及大量的代码和计算资源,以下是一个基于TensorFlow 2.x的简化版GPT模型构建和调用的示例。请注意,这仅展示了模型的基本结构,实际运行需替换为真实数据集和预处理步骤,且无法直…

深入理解Transformer架构:从Seq2Seq到无监督预训练的演进

Transformer问答-2 根据我的了解,最开始Transformer的架构为encoderdecoder,是用于处理Seq2Seq任务的,后来GPT系列只采用decoder-only架构专注于next toke prediction任务,在我的认识当中,这两者都可以归为next toke …

基于粒子群算法的分布式电源配电网重构优化matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1基本PSO算法原理 4.2配电网重构的目标函数 5.完整工程文件 1.课题概述 基于粒子群算法的分布式电源配电网重构优化。通过Matlab仿真,对比优化前后 1.节点的电压值 2.线路的损耗,这里计…

18双体系Java学习之数组赋值和拷贝

数组赋值 数组拷贝 ★小贴士 Object src指定源数组, int srcPos指定复制开始的位置, Object dest指目标数组, int destPos指定复制的内容从哪个位置开始放置, int length 指复制的长度, 也就是说源数组中位置从 s…

ubuntu18.04安装ffmpeg

编译ffmpeg命令如下: 1.安装yasm wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz tar xvzf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && make install2.安装nasm(2.13以上版本) wget https://www.nasm.us/pub/nasm/re…

如何解决Hexo个人博客上传GitHub后无法更新问题

HexoGitHub提供了一个轻量级、易于管理的平台,让大家可以轻松建立并维护自己的博客。然而,许多初次使用Hexo的朋友可能会遇到一个常见问题:在将博客上传到GitHub之后,对博客进行更新,但是网页上的内容却没有改变。本文…

linux环境下连接db2数据库的操作

linux环境下连接db2数据库的操作 1 查看db2连接相关信息2 建立连接3 取消连接4 测试连接 1 查看db2连接相关信息 su - db2inst1 ~]$ db2 list db directory ~]$ db2 list node directory ~]$ db2 list dcs directory2 建立连接 su - db2inst1 ~]$ db2 terminate ~]$ db2 cata…

数据结构大合集02——线性表的相关函数运算算法

函数运算算法合集02 顺序表的结构体顺序表的基本运算的实现1. 建立顺序表2. 顺序表的基本运算2.1 初始化线性表2. 2 销毁顺序表2.3 判断顺序表是否为空表2.4 求顺序表的长度2.5 输出顺序表2.6 按序号求顺序表中的元素2.7 按元素值查找2.8 插入数据元素2.9 删除数据元素 单链表的…

如何使用人工智能打造超用户预期的个性化购物体验

回看我的营销职业生涯,我见证了数字时代如何重塑客户期望。从一刀切的方法过渡到创造高度个性化的购物体验已成为企业的关键。在这个客户期望不断变化的新时代,创造个性化的购物体验不再是奢侈品,而是企业的必需品。人工智能 (AI&…

插件电阻的工作原理,结构特点,工艺流程,选型参数及设计注意事项总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,引脚设计3.2,电阻体3.3,封装4,工艺流程4.1,材料准备4.2,电阻体制作4.3,引脚焊接4.4,绝缘处理4.5,测试与筛选4.6,包装与存储

常见的十大网络安全攻击类型

常见的十大网络安全攻击类型 网络攻击是一种针对我们日常使用的计算机或信息系统的行为,其目的是篡改、破坏我们的数据,甚至直接窃取,或者利用我们的网络进行不法行为。你可能已经注意到,随着我们生活中越来越多的业务进行数字化&…

[数据集][目标检测]焊接件表面缺陷检测数据集VOC+YOLO格式2292张10类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2292 标注数量(xml文件个数):2292 标注数量(txt文件个数):2292 标注…

阿里云下载安装centos

这里以centos7.x版本下载安装为例 : 网址 : 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 点击centos : 再点击下载地址 : 找到 7/ 并点击 : 找到isos/并点击 : 点击x86_64 : 找到4.4G的文件点击下载 ; 点击创建新的虚拟机 , 然后选择典型 , 然后点击下一…