IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 字符串函数(4)--strtok函数和strerror函数 -> 正文阅读

[C++知识库]字符串函数(4)--strtok函数和strerror函数

1.strtok函数 — 分割字符串函数

2.strerror函数 — 错误报告函数

1.strstok函数的用法

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

直接看函数的声明:
参数1:要切割的地址,参数2:切割时的标记物

注意:strtok函数本身会记住第一次传过来的这个地址,第一次传过来时:如果这个地址为空,则strtok函数返回一个空指针,如果这个地址不为空,则返回传过来的首地址。

由于这个函数的第二个参数为要切割的标记物,假如这个标记物不存在,返回的也是第一次传进来的要切割的函数的首地址。

下面举例说明:

int main()
{
	char arr[] = "abcd@.dde.agc";
  //192.168.31.121
	//ip地址:点分十进制的表示方式
	char* p = "--";  // 标记物
	char* ret = NULL;
	for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
	{	//这个函数自己会识别上一次标记的位置
		printf("%s\n",ret);
	}

}

在这里插入图片描述

找不到标记物,返回的是字符串的首地址。
那要是找到了标记物呢?
打印出来的结果是这样的:
在这里插入图片描述
调试后发现:

在这里插入图片描述
第一次切割时,标记物的位置被改成了 ‘\0’
你可能会问,在循环内部,为什么 是 ret = strtok (NULL,p) 呢?传递的不应该是arr吗,
是的,传递的确实不是arr,而是 NULL,为什么呢?

是因为strtok函数内部,在第一次接收到字符串的地址后,当它切割成功时,会自己记住这个切割点的位置,下一次调用这个函数时,它会记住这个位置并且从该位置的下一个位置开始寻找切割物。

这就是为什么第二次及以后调用strtok函数时,传递的第一个参数是NULL的原因。

当我们进行第二次切割时,会发现一个奇怪的问题:
为什么第二次切割没有将第一个@后的 . 改成 ‘\0’ ?,而是在之后的 . 改成 ‘\0’ 呢?
如下图:
在这里插入图片描述

进一步探讨后发现:

在这里插入图片描述

当第一次切割成功后,第二次切割时,我们知道,这个函数会记住上一次切割点并从下一个位置开始寻找切割点,然而,当这所谓的下一个位置,是切割点时,这个函数直接不理,不改成 ‘\0’,直接跳过继续寻找,知道找到的字符不是切割标记字符时,从这以后,才开始真正意义上的找切割点,并更改为 \0

也就是说,第一次切割成功后,abcd@.@@中的第一个@,被改成了 ‘\0’,第二次调用该函数时, .@@不会被改成 ‘\0’,而是直接跳过,继续寻找,知道找到不是切割物的字符。
看到这里,你应该明白了strtok函数的使用方法。

2.strerror函数的使用方法

strerror–错误报告函数,它会返回错误码,所对应的错误信息

  错误码  错误信息
	0		No error
	1		Operation not permitted
	2		No such file or directory

	errno : 是一个全局的错误码的变量
当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码,赋值到errmo中

举例:

int main()
{
	FILE* fp = fopen("text.txt", "r");
	if (fp == NULL)
	{
		printf("%s\n", strerror(errno));
	}
	else
	{
		printf("open file successfully\n");
	}
}

当我们打开文件时,由于电脑中没有这个文件,故会返回错误报告:
在这里插入图片描述
将errno放在strerror中,是为了将该错误码所对应的错误信息放到strerror中,以便返回来打印。

该函数的使用方法就这么简单,一般是配合打开文件等操作使用。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:47:31  更:2022-12-25 10:49:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 15:06:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码