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,一经查实,立即删除!

相关文章

ICANN备稿时debug遇到的问题

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

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.第一列遍历完了后我们先判断第一列的数是否都满足条件插入到数组里面,如果数组为空&#…

基于粒子群算法的分布式电源配电网重构优化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…

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

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

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

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

[数据集][目标检测]焊接件表面缺陷检测数据集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的文件点击下载 ; 点击创建新的虚拟机 , 然后选择典型 , 然后点击下一…

栈和队列(Java实现)

栈和队列(Java实现) 栈 栈(Stack):栈是先进后出(FILO, First In Last Out)的数据结构。Java中实现栈有以下两种方式: stack类LinkedList实现(继承了Deque接口) (1&am…

Docker入门一(Docker介绍、Docker整体结构、Docker安装、镜像、容器、Docker的容器与镜像)

文章目录 一、Docker介绍1.什么是虚拟化2.虚拟化模块3.docker是什么4.docker平台介绍5.为什么使用docker6.docker主要解决的问题 二、docker整体结构1.Docker引擎介绍(Docker Engine)2.Docker结构概览介绍3.Docker底层技术 三、docker安装1.Docker-CE和D…

Git——分支详解

目录 Git分支1、开始使用分支1.1、新增分支1.2、更改分支名称1.3、删除分支1.4、切换分支1.5、切换分支时1.6、要切换到哪个分支,首先要有那个分支 2、分支原理2.1、单个分支2.2、多个分支2.3、切换分支时的逻辑1、更新暂存区和工作目录2、变更HEAD的位置 2.4、如果…

GPT-4.5 Turbo详细信息被搜索引擎泄露:有重大改进

3月14日消息,据外电报道,OpenAI 最新人工智能模型 GPT-4.5 Turbo 的详细信息已通过 Bing 和 DuckDuckGo 的搜索引擎索引过早泄露。 GPT-4.5 Turbo 的产品页面在正式发布之前就出现在搜索结果中,引发了人们对 OpenAI 最新型号的特性和功能的猜…

每周一算法:双向深搜

题目描述 达达帮翰翰给女生送礼物,翰翰一共准备了 N N N 个礼物,其中第 i i i 个礼物的重量是 G [ i ] G[i] G[i]。 达达的力气很大,他一次可以搬动重量之和不超过 W W W的任意多个物品。 达达希望一次搬掉尽量重的一些物品,请…

微服务:Sentinel篇

1. 初识Sentinel 1.1. 雪崩问题以及解决方案 1.1.1. 雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此…

静默安装OGG21.3微服务版本FOR ORACLE版本

静默安装OGG21.3微服务版本FOR ORACLE版本 silent install ogg21.3 for oracle 某度找来找去都没有找到一份可靠的静默安装OGG21.3微服务版本的案例,特别难受,为此将自己静默安装的步骤一步步贴出来分享给大家,请指点,谢谢。 至…

Web Speech API的语音识别技术

SpeechSynthesis对象 这是一个实验性技术 目前兼容性如图: pc端几乎兼容,移动端部分不兼容 网页语音 API 的SpeechSynthesis 接口是语音服务的控制接口; 它可以用于获取设备上关于可用的合成声音的信息,开始、暂停语音&#x…

软件杯 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数:2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …