【C语言进阶:刨根究底字符串函数】strtok strerror函数

本节重点内容:

  • 深入理解strtok函数的使用
  • 深入理解strerror函数的使用

⚡strtok

  •  Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part ofstr1
  • sep参数是个字符串,定义了用作分隔符的字符集合。
  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
    strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的标记,则返回 NULL 指针。

strtok函数的基本用法:

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

int main()
{
	char arr[] = "[email protected]";
	const char* p = "@.";
	char buf[30] = { 0 };
	char* str = NULL;
	strcpy(buf, arr);//将数据拷贝一份,处理arr数组的内容
	for (str = strtok(buf, p); str != NULL; str = strtok(NULL, p))
	{
		printf("%s\n", str);
	}
	return 0;
}

运行结果如下:


⚡strerror

  •  返回错误码,所对应的错误信息。

strerror函数的基本使用:

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

int main()
{
	char* p = strerror(0);
	printf("%s\n", p);

	char* p1 = strerror(1);
	printf("%s\n", p1);

	char* p2 = strerror(2);
	printf("%s\n", p2);
	return 0;
}

运行结果如下:

通过以上的例子,我们可以将 strerror 函数看作将错误码(0,1,2)翻译为错误信息。

上例的代码只是为了方便演示功能才举出的例子,事实上C语言的库函数在调用失败的时候,会将一个错误码存放在一个叫 errno 的变量中,当我们想知道在调用库函数是发生了什么错误信息,就可以将 errno 中的错误码翻译成错误信息。

演示打开读取关闭文件的过程代码示例如下:

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

int main()
{
	//打开文件
	//打开文件的时候,若打开的方式为“r”
	// 若文件存在则打开,若文件不存在则打开失败
	//若打开文件失败,会返回NULL
	FILE* pf = fopen("test.txt", "r"); //意思是 以读的形式打开文件test.txt
	if (pf == NULL)
	{
		printf("打开文件失败,原因是:%s\n", strerror(errno));
		return 1;
	}
	//读写文件
	//……
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

由于我的电脑中不存在这个文件,因此运行结果如下:


补充:perror

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

int main()
{
	FILE* pf = fopen("test.txt", "r"); 
	if (pf == NULL)
	{
		perror("打开文件失败");
		return 1;
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

运行结果如下:


感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

猜你喜欢

转载自blog.csdn.net/JX_BC/article/details/129695682
今日推荐