C语言王国——字符函数和字符串函数(2)

目录

5 strtok函数

5.1 函数的表达式

5.2 函数模拟

6 strstr函数

6.1 函数表达式

7 strerror函数

7.1 函数表达式

7.2 例子

 7.3 perror

8 strncpy、strncat、strncmp函数

四 结论


5 strtok函数

strtok函数我的理解是他是一个分割字符串的函数

5.1 函数的表达式

char* strtok( char* str, const char* sep);

*注意:

  1. sep指向一个字符串,此字符串为分隔符的字符集合。谨记sep是字符串,分隔字符的集合,就是说把分隔字符集中在sep中。
  2. strtok函数会在str字符串中找到下一个sep中的分隔字符,将其变为'\0',并且返回一个指向这个标记的指针。(这是strtok函数第一个参数不为NULL的情况)
  3. 诺第一个参数为NULL时,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  4. 如果字符串不存在更多的标记,则返回NULL指针。
  5. 注意strtok函数会改变被操作的字符串,所以此函数分隔的字符串一般都是临时拷贝的内容并且是可以修改的。

5.2 函数模拟

 "Hello world_xxxx"中空格和'_'为分隔符

#include <stdio.h>
#include <string.h>

int main()
{
	char arr[] = "hello world_xxxx";
	char* sep = " _";
	char* str = NULL;
	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
	{
		printf("%s\n", str);
	}
	return 0;
}


6 strstr函数

此函数是一个函数在另外一个函数中第一次出现的位置。

6.1 函数表达式

char* strstr( const char* str1,const char* str2);

*字符串的比较匹配不包含\0,以\0作为结束标志。


7 strerror函数

此函数就是可以把参数部分错误码对应的信息以字符串地址返回。

7.1 函数表达式

char* strerror( int errnum );

因为这个概念比较官方所以我就用引用大佬的话了:

在不同的系统和C语言标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头文件中说明 的,C语言程序启动的时候就会使用⼀个全面的变量errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应 的错误码,存放在errno中,而⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

什么意思呢?那就让姜糖给各位总结一下吧:

  • 要包含头文件errno.h
  • 此头文件中会用一个变量errno来记录程序错误码
  •  启动时为0表示没有错误,而一旦有错误,errno中的值就会于头文件中的字符串相对应方便我们理解。

7.2 例子

那就来举个例子方便大家理解吧;

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main()
{
	FILE* pFile;
	pFile = fopen("unexist.ent", "r");
	if (pFile == NULL)
		printf("Error opening file unexist.ent: %s\n", strerror(errno));
	return 0;
}

 该指令是让我们以只读模式去打开一个"unexist.ent”文件但是此时我们是没有这个文件的,当此操作错误的时候,错误码对应的值就会赋给errno,然后我们判断pFile是否为NULL,也就是判断程序是否错误,然后我们再用strerror打印该错误。让我们运行一下来看看吧。

 7.3 perror

既然讲到了strerror函数那我在这里提一提另外一个函数吧那就是perror函数,他也是打印错误代码的原因的只不过strerroe是这么表示的:

printf("Error opening file unexist.ent: %s\n", strerror(errno));

而perror是这么表示的 :

perror("Error opening file unxist.ent");

perror的输入结果如下:

 

对比于strerror函数,perror函数打印完参数部分的字符串后,再打印一个冒号和一个空格,再打印错误信息。


8 strncpy、strncat、strncmp函数

为什么我在这里把这三个函数一起进行介绍呢因为这个函数和我前面介绍的有三个函数用法差不多,接下来就让我先来写一下他们的函数表达式吧:

char* strncpy( char* destination, const char* source, size_t num);
char* strncat( char* destination, const char* source, size_t num);
int strncmp( const char* destination, const char* source, size_t num);

有没有发现他们和前面代码的相似之处?——多了一个num,那么这个num变量有什么用呢?

strncpy函数中:规定原代码的拷贝的个数,诺原来字符串不足num个,则拷贝完后追加0,直到num个。

strncat:将原字符串前num个字符拷贝到目标函数后,诺原字符串不足num个则只追加原字符串中字符的个数。

strncmp中:比较前num个是否相等,其他一样。


四 结论

字符串函数中的使用都要包含头文件string,这里模拟函数只是给大家一种参考不一定完成一样,但利于大家理解,这些库函数也是人写的,他们这些程序员能做到的事情,为什么我们不能做到。那大家就一起跟随姜糖的脚步一步步成为大牛吧。谢谢大家的支持!希望大家发现姜糖的问题及时给姜糖指出来也别忘了一键三连哦。

大家如果对这些函数有兴趣,想知道姜糖是在哪里找的大家可以看看姜糖最初的文章里面推荐了一个网址https://legacy.cplusplus.com/,这个是专门用来查函数和库的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏无人机踏勘需要使用哪些设备?用到哪些原理?

随着全球能源结构的转型和绿色能源的大力推广&#xff0c;光伏电站的建设和运维正成为能源领域的热点。然而&#xff0c;光伏电站的选址、建设和后期运维过程中&#xff0c;往往面临着地形复杂、设备分散、巡检难度大等挑战。在这一背景下&#xff0c;无人机踏勘技术以其独特的…

最新 Navicat Data Modeler 4 | 产品介绍

在过去的几周里&#xff0c;我们已经介绍了 Navicat 版本 17&#xff0c;现在我们来把注意力转移到另外两个值得关注的产品上&#xff0c;即 Navicat Data Modeler 和 Navicat BI&#xff08;之前称为 Navicat Chart Creator&#xff09;。今天的博客将介绍 Navicat Data Model…

draw.io 如何设置图形圆角?

draw.io 如何设置图形圆角呢&#xff1f; draw.io 是一款强大的&#xff0c;免费的开源工具&#xff0c;我经常用它来画流程图&#xff0c;但是我发现 draw.io 对于图形圆角的设置&#xff0c;只提供了一个设置选项&#xff0c;如下图&#xff1a; 当你选中某个图形&#xff0…

go语言进阶 init() 函数

go 语言包 在一个项目中通常我们需要引入第三方包&#xff0c;我们来看下 当我们导入一个包的时候 发生了什么&#xff1a; 首先我们先详细介绍下两个函数&#xff1a; init(), main() 是 go 语言中的保留函数。我们可以在源码中 定义 init()函数&#xff0c; 此函数会在包导入…

谷粒商城实战(031 业务-秒杀功能2)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第315p-第p318的内容 秒杀上架 定时上架功能 EnableAsync 异步 EnableScheduling 定时调度 Configuration 配置类 创建上架定时任务类和方法 …

抖店商家疑惑,自然流量突然下滑,为什么呢?

大家好&#xff0c;我是喷火龙。 很多的抖店商家会遇到一种情况&#xff0c;那就是自己店铺的流量好好的&#xff0c;不知道怎么的就突然没流量了&#xff0c;各方面的数据都断崖式的下降。 为什么会这样呢&#xff1f;原因有以下几点&#xff0c;大家可以检查一下&#xff0…

Typora配置自动上传图片到图床

Typora配置自动上传图片到图床 在多平台发布文章时&#xff0c;如果遇到图片不能导入的问题&#xff0c;推荐使用图床&#xff01;推荐使用阿里云或腾讯云&#xff0c;免费的不用考虑了&#xff01; PicGo下载 链接&#xff1a;夸克网盘分享 使用手册&#xff1a; PicGo is…

《python开发》cannot allocate memory in static TLS block-报错问题解决

阿丹&#xff1a; 今天在配置跑rasa训练的时候出现问题&#xff0c;找了国内论坛有解决的人&#xff0c;但是说的不明白。查阅了很多论坛之后发现了解决的方案。 https://github.com/keras-team/keras-tuner/issues/317 问题描述以及错误&#xff1a; 关键错误 &#xff1a;c…

升级最新版openssh-9.7p1及openssl-1.1.1h详细步骤及常见问题总结

近期因为openssh相继被漏洞扫描工具扫出存在漏洞&#xff0c;所以考虑升级操作系统中的openssh和openssl为最新版本&#xff0c;来避免漏洞风险。期间的升级过程及遇到的疑难问题&#xff0c;特此记录下来&#xff0c;供有需要的人参考。 本次目标是升级 openssh 为 9.7p1 版本…

ios v品会 api-sign算法

vip品会 api-sign算法还原 ios入门案例 视频系列 IOS逆向合集-前言哔哩哔哩bilibili 一、ios难度与安卓对比 这里直接复制 杨如画大佬的文章的内容&#xff1a; ios难度与安卓对比 很多人说ios逆向比安卓简单&#xff0c;有以下几个原因 1 首先就是闭源&#xff0c;安卓开源…

UIScrollView代理

场景&#xff1a; 想要监控某组件&#xff0c;可以通过addTarget&#xff0c;但是复杂一点的&#xff0c;如UIScrollView的滚动监听就需要通过代理来实现了。代理本质是官方定义好的协议&#xff08;接口&#xff09;&#xff0c;你只要用官方给出的API接口&#xff0c;就能实…

osg库的下载和安装

下载 下载地址:https://github.com/openscenegraph/OpenSceneGraph 安装 打开Cmake.exe,将上述下载的osg文件下的CMakeLists.txt文件拖入Cmake界面中。 在其路径下新建一个build文件 并配置cmake,点击Configure 修改如下几个选项 ACTUAL_3RDPARTY_DIR BUILD_OSG_EXAM…

Open vSwitch 数据包转发

一、数据包转发流程 Open vSwitch 数据包转发流程如下图所示&#xff0c;其中红色数字序号表示数据包转发的步骤顺序。 以下步骤为一个数据包通过 OVS 时的首次处理流程&#xff1a;&#xff08;步骤序号和图中序号一一对应&#xff09; OVS 从设备接口中获取数据包并交…

GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践

当下是 Python 急剧发展的时代&#xff0c;越来越多的人开始学习和使用Pyhon&#xff0c;而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格&#xff0c;并解释了背后的原理和机制。 入门 Python 语言相对简单&#xff0c;但写出优雅的代码并…

营造科技展厅主题氛围,多媒体应用有哪些新策略?

长久以来&#xff0c;展厅作为线下向公众传递信息的窗口&#xff0c;其设计风格与内容主题紧密相连&#xff0c;展现出千姿百态的面貌。然而&#xff0c;随着数字多媒体技术的日新月异&#xff0c;展厅不再仅仅是传统的信息展示平台&#xff0c;而是成为了引领内容展示潮流的风…

技术积累1:Java容错机制

如何优雅地重试 原创 赵九文 字节跳动技术团队 2021-01-05 10:01 背景 在微服务架构中&#xff0c;一个大系统被拆分成多个小服务&#xff0c;小服务之间大量 RPC 调用&#xff0c;经常可能因为网络抖动等原因导致 RPC 调用失败&#xff0c;这时候使用重试机制可以提高请求的…

git获取的项目无法运行

一、Unsupported engine 问题&#xff1a;在使用命令npm install下载依赖项的时候就遇到了这个问题&#xff0c;有帖子说多试几次&#xff0c;其实这是提示node版本问题&#xff0c;版本的更新出现兼容性问题&#xff0c;多试几次也没用。 解决方案&#xff1a; 更新node.js的…

HiWoo Cloud数据采集监控系统

在数字化、智能化的浪潮中&#xff0c;企业如何高效地管理其设备、优化生产流程、提升运营效率&#xff1f;答案或许就隐藏在HiWoo Cloud——这款数据采集监控系统中。今天&#xff0c;就让我们一起走进HiWoo Cloud的世界&#xff0c;探索它如何助力企业实现数字化转型&#xf…

7 -力扣高频 SQL 50 题(基础版)

7- 产品销售分析 I select product_name,year,price from Sales left join Product on Sales.product_id Product.product_id;

matlab模拟太阳耀斑喷发

代码 function simulate_solar_flare% 参数设置gridSize 100; % 网格大小timeSteps 200; % 时间步数dt 0.1; % 时间步长% 初始化网格[X, Y] meshgrid(linspace(-5, 5, gridSize));Z zeros(size(X));% 设置耀斑初始位置和强度flareCenter [0, 0]; % 耀斑中心位置flareRad…