本节重点内容:
- 深入理解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语言。