【strtok函数和strerror函数的介绍和使用以及扩展】

strtok函数和strerror函数的介绍和使用以及扩展

一.strtok函数

1.strtok函数介绍

资源来源于cplusplus网站
【strtok函数和strerror函数的介绍和使用以及扩展】_第1张图片

它的作用:
对此函数的一系列调用将 str 拆分为标记,这些标记是由分隔符中的任何字符分隔的连续字符序列。
在第一次调用时,该函数需要一个 C 字符串作为 str 的参数,其第一个字符用作扫描令牌的起始位置。在后续调用中,该函数需要一个空指针,并使用最后一个令牌末尾之后的位置作为扫描的新起始位置。
为了确定标记的开头和结尾,该函数首先从起始位置扫描分隔符中未包含的第一个字符(该字符将成为标记的开头)。然后从令牌的开头开始扫描分隔符中包含的第一个字符,该字符将成为令牌的末尾。如果找到终止空字符,扫描也会停止。
令牌的此结尾将自动替换为空字符,并且令牌的开头由函数返回。
一旦在对 strtok 的调用中找到 str 的终止空字符,则对此函数的所有后续调用(以空指针作为第一个参数)都将返回空指针。
找到最后一个令牌的点由要在下一次调用中使用的函数在内部保留(不需要特定的库实现来避免数据争用)。

2.strtok函数的使用

2.1函数结构

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

2.2用法说明

• sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合
• 第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记。
• strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。)
• strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串中的位置。
• strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标记。
• 如果字符串中不存在更多的标记,则返回 NULL 指针。

2.3代码实现

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

2.4结果展示

【strtok函数和strerror函数的介绍和使用以及扩展】_第2张图片

二.strerror函数

1.strerror函数介绍

资源来源于cplusplus网站
【strtok函数和strerror函数的介绍和使用以及扩展】_第3张图片

它的作用是:
解释 errnum 的值,生成一个字符串,其中包含描述错误条件的消息,就像由库的函数设置为 errno 一样。
返回的指针指向静态分配的字符串,程序不应修改该字符串。对此函数的进一步调用可能会覆盖其内容(不需要特定的库实现来避免数据争用)。
strerror 生成的错误字符串可能特定于每个系统和库实现。

简化:获取指向错误消息字符串的指针

2.strerror函数的使用

2.1.函数结构

char * strerror ( int errnum );

2.2用法说明

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

【strtok函数和strerror函数的介绍和使用以及扩展】_第4张图片

2.3代码实现

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		char * ret = strerror(i);
		printf("%d : %s\n", i, ret);
	}

	return 0;
}

2.4结果展示

【strtok函数和strerror函数的介绍和使用以及扩展】_第5张图片

2.5与strerror函数相关知识:全局变量errno和perror函数

2.5.1具体用法说明
//当库函数调用失败的时候,会讲错误码记录到errno这个变量中
//errno是一个C语言的全局变量

//打开文件 - 读写文件之前,需要打开文件
//读取文件前,需要打开文件,如果要打开成功,需要文件是存在的,如果文件不存在,则打开失败,fopen会返回NULL

#include 
#include 

//相关的函数:perror
int main()
{
	FILE* pf = fopen("add.txt", "r");//用fopen这个函数打开一个文件,如果这个函数被调用就会返回一个FILE*的指针pf
	if (pf == NULL)
	{
		//printf("打开文件失败,失败的原因: %s\n", strerror(errno));
		perror("fopen");//
		printf("fopen: %s\n", strerror(errno));
		return 1;
	}
	else
	{
		printf("打开文件成功\n");
		//...
	}
	return 0;
}

2.6strerror函数和perror函数的差异

strerror函数如果要返回错误信息的地址需要printf函数打印出来到屏幕上。
而perror函数直接就可以将错误信息打印到屏幕上。

你可能感兴趣的:(C语言,#,函数,#指针,c语言,算法,库函数的模拟实现)