当前位置: 首页 > news >正文

【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[] = "1582834943@qq.com";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”// 若文件存在则打开,若文件不存在则打开失败//若打开文件失败,会返回NULLFILE* pf = fopen("test.txt", "r"); //意思是 以读的形式打开文件test.txtif (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

http://www.lryc.cn/news/42227.html

相关文章:

  • 西安石油大学C语言期末重点知识点总结
  • 读《Multi-level Wavelet-CNN for Image Restoration》
  • 【Linux】安装DHCP服务器
  • 功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂
  • 数据结构之哈希表
  • linux信号理解
  • HC小区管理系统window系统安装教程
  • 自动化测试工具软测界的不二之选,还不快速来了解
  • centos系统/dev/mapper/centos-root目录被占满的解决方式
  • 【C++】STL容器、算法的简单认识
  • 把python开发的web服务,打包成docker镜像的方法
  • 【Linux】多线程
  • Qt 设置窗口背景图片的几种方法实例
  • springcloud微服务架构搭建过程
  • LeetCode:215. 数组中的第K个最大元素
  • vue面试题(day06)
  • 22 k8s常用命令
  • 基于ESP32做低功耗墨水屏时钟
  • 常见路由器开源系统(固件)简介
  • HCIE-Cloud Computing LAB备考第二步:逐题攻破--第二题:FusionAccess-搭建FA实验环境之安装基础组件和初始化ITA组件
  • Android APP检查设备是否为平板
  • MP:使用步骤、分页、queryWrapper
  • C++ string类
  • 虚拟机断电centos无法启动
  • python学习之基于Python的人脸识别技术学习
  • [Qt][Android] Qt for Android 环境搭建
  • maven setting 配置
  • 【0基础学爬虫】爬虫基础之网络请求库的使用
  • 超级实用,解密云原生监控技术,使用prometheus轻松搞定redis监控
  • 音视频开发—MediaCodec 解码H264/H265码流视频