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

C 风格文件输入/输出---错误处理---(std::clearerr,std::feof,std::ferror,std::perror)

C++ 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 <cwchar>头文件提供有宽字符输入/输出能力的函数。

错误处理

清除错误

std::clearerr

void clearerr( std::FILE* stream );

重置给定文件流的错误标志和 EOF 指示器。

参数

stream-要重置错误标志的文件流

返回值

(无)

调用示例

#include <iostream>
#include <cstdio>using namespace std;int main()
{int ch = 0;FILE* fp = fopen("test.txt", "w");if (fp){ch = std::getc(fp);std::printf("%c", ch);if (std::ferror(fp)){std::cout << "Error set" << std::endl;std::clearerr(fp);}}if (!std::ferror(fp)){std::cout << "Error reset" << std::endl;}std::fclose(fp);return 0;
}

输出

检查文件尾

std::feof

int feof( std::FILE* stream );

检查是否已抵达给定文件流的结尾。

参数

stream-要检查的文件流

返回值

若已抵达文件流尾则为非零值,否则为 ​0​ 。

注意

此函数只报告最近的 I/O 操作所报告的流状态,它不检验关联数据源。例如,若最近一次 I/O 是返回文件最后字节的 std::fgetc ,则 std::feof 返回零。下个 std::fgetc 失败并更改文件流为文件尾。只在这之后 std::feof 才返回非零。

典型用法中,输入流在任何错误时停止处理;然后用 feof 和 std::ferror 区别不同的错误条件。

调用示例

#include <cstdio>
#include <cstdlib>int main()
{FILE* fp = std::fopen("test.txt", "r");if (!fp){std::perror("File opening failed");return EXIT_FAILURE;}int c; // 注意:是 int 而非 char ,要求处理 EOFwhile ((c = std::fgetc(fp)) != EOF)   // 标准 C I/O 文件读取循环{std::putchar(c);}if (std::ferror(fp)){std::puts("I/O error when reading");}else if (std::feof(fp)){std::puts("End of file reached successfully");}std::fclose(fp);return 0;
}

 输出

检查文件错误

std::ferror

int ferror( std::FILE* stream );

检查给定的流的错误。

参数

stream-要检查的文件流

返回值

若文件流已出现错误则为非零值,否则为 ​0​ 。

调用示例

#include <cstdio>
#include <cstdlib>
#include <clocale>
#include <cwchar>
#include <iostream>int main(void)
{const char *fname = std::tmpnam(nullptr);std::cout << "fname:    " <<  fname << std::endl;std::FILE* f = std::fopen(fname, "wb");std::fputs("\xff\xff\n", f); // 不是合法的 UTF-8 字符序列std::fclose(f);std::setlocale(LC_ALL, "en_US.utf8");f = std::fopen(fname, "rb");std::wint_t ch;while ((ch = std::fgetc(f)) != WEOF) // 试图作为 UTF-8 读取{std::printf("%#x ", ch);}if (std::feof(f)){puts("EOF indicator set");}if (std::ferror(f)){puts("Error indicator set");}return 0;
}

输出

显示对应当前错误的字符串于 stderr

std::perror

void perror( const char *s );

打印当前存储于系统变量 errno 的错误码到 stderr 。

通过连接下列组分构成描述:

  • s 所指向的空终止字节字符串的内容后随 ": " (除非 s 为空指针或 s 所指向字符为空字符)
  • 实现定义的,描述存储于 errno 的错误码的错误消息字符串后随 '\n' 。错误消息字符串等同于 std::strerror(errno) 的结果。

参数

s-指向拥有解释性消息的空终止字符串的指针

返回值

(无)

调用示例

#include <cmath>
#include <cerrno>
#include <cstdio>int main()
{double not_a_number = std::log(-1.0);if (errno == EDOM){std::perror("log(-1) failed");}return 0;
}

输出

相关文章:

C 风格文件输入/输出---错误处理---(std::clearerr,std::feof,std::ferror,std::perror)

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 错误处理 清除错误 std::clearerr void clearerr( std::FILE…...

mysql 主从复制 mysql版本5.7.35

文章目录 1.注意要点2.环境3.MySQL 主从配置的步骤&#xff1a;主从库新增DB主服务配置my.cnf从服务配置my.cnf主服务器创建复制用户从服务器执行复制 外传 MySQL 主从复制&#xff08;Master-Slave Replication&#xff09;是一个常用的高可用性和可扩展性解决方案。通过主从复…...

iOS“超级签名”绕过App Store作弊解决方案

一直以来&#xff0c;iOS端游戏作弊问题都是游戏行业的一大痛点。在当下游戏多端互通的潮流下&#xff0c;游戏作为一个整体&#xff0c;无论哪一端出现安全问题&#xff0c;都会造成更加严重的影响。因此&#xff0c;iOS端游戏安全保护也同样十分重要。 iOS独特的闭源生态&am…...

I2C子系统、读取温湿度的逻辑及代码

一、IIC子系统 两根线&#xff1a; scl:时钟线 sda:数据线 iic有4种信号&#xff1a; 起始信号&#xff08;start&#xff09;:scl是高电平&#xff0c;sda下降沿 终止信号&#xff08;stop&#xff09;:scl高电平&#xff0c;sda上升沿 应答信号&#xf…...

数据结构——排序

排序算法 前言一、认识排序排序的概念常见的排序算法排序实现的接口 二、常见排序算法的实现插入排序直接插入排序希尔排序 选择排序直接选择排序堆排序 交换排序冒泡排序 三、各个排序的效率比较四、完整代码演示&#xff1a;shell_insert.hshell_insert.ctest.c 总结 前言 来…...

资深java面试题及答案整理

编写 Java 程序时, 如何在 Java 中创建死锁并修复它&#xff1f; 经典但核心Java面试问题之一。 如果你没有参与过多线程并发 Java 应用程序的编码&#xff0c;你可能会失败。 如何避免 Java 线程死锁&#xff1f; 如何避免 Java 中的死锁&#xff1f;是 Java 面试的热门问题之…...

buuctf-[网鼎杯 2020 朱雀组]phpweb

1.打开网站&#xff0c;吓我一跳 2.查看源代码&#xff0c;主要看到timezone&#xff0c;然后这个页面是五秒就会刷新一次 一开始去搜了这个&#xff0c;但是没什么用 3.使用bp抓包 会发现有两个参数&#xff0c;应该是用func来执行p 4.修改func和p file_get_contents&#…...

SpringBoot实战(二十四)集成 LoadBalancer

目录 一、简介1.定义2.取代 Ribbon3.主要特点与功能4.LoadBalancer 和 OpenFeign 的关系 二、使用场景一&#xff1a;Eureka LoadBalancer服务A&#xff1a;loadbalancer-consumer 消费者1.Maven依赖2.application.yml配置3.RestTemplateConfig.java4.DemoController.java 服务…...

文件挂载nas挂载

准备资源 nas服务器&#xff1a; 192.168.1.2 分配的nas卷名&#xff1a; mynasvolumename 在本地机器挂载nas卷 mkdir -p /mnt/localmountdir 执行挂载 mount -t nfs 192.168.1.2:mynasvolumename/ /mnt/localmountdir 本地进入nas目录 cd /mnt/localmountdir 可以…...

电影格式怎么转换mp4?电影格式转换教程

电影格式怎么转换mp4&#xff1f;平时喜欢看电影的小伙伴都知道&#xff0c;平时我们下载到的电影文件格式可谓是五花八门&#xff0c;如Mp4、Flv、AVI、WMV、MKV、MOV等。然而&#xff0c;相较于其他常用格式&#xff0c;MP4是一种使用最为广泛的视频格式&#xff0c;并且文件…...

HarmonyOS之 组件的使用

一 容器 1.1 容器分类 Column表示沿垂直方向布局的容器。Row表示沿水平方向布局的容器。 1.2 主轴和交叉轴 主轴&#xff1a;在Column容器中的子组件是按照从上到下的垂直方向布局的&#xff0c;其主轴的方向是垂直方向&#xff1b;在Row容器中的组件是按照从左到右的水平方向…...

IAM:身份验证与授权

身份验证和授权可能听起来相似&#xff0c;但在核心功能方面它们是不同的。身份验证和授权是在用户尝试访问其资源时执行的安全过程。身份验证和授权在防止网络安全漏洞和加强组织的安全系统方面发挥着至关重要的作用。 验证&#xff1a;验证用户的身份 - 用户是谁&#xff1f…...

Linux——vi编辑器

目录 一、基本简介 二、命令模式下的常用按键 1、光标跳转按键 2、复制、粘贴、删除 三、编辑模式 四、末行模式 1、查找关键字并替换 2、保存退出 3、其他操作 五、模式切换 一、基本简介 1、最早可追随到1991年&#xff0c;全称为“Vi IMproved” 2、模式 ——命…...

【Linux学习笔记】权限

1. 普通用户和root用户权限之间的切换2. 权限的三个w2.1. 什么是权限&#xff08;what&#xff09;2.1.1. 用户角色2.1.2. 文件属性 2.2. 怎么操作权限呢&#xff1f;&#xff08;how&#xff09;2.2.1. ugo-rwx方案2.2.2. 八进制方案2.2.3. 文件权限的初始模样2.2.4. 进入一个…...

Aspose转pdf乱码问题

一、问题描述 ​ 在centos服务器使用aspose.word转换word文件为pdf的时候显示中文乱码(如图)&#xff0c;但是在win服务器上使用可以正常转换 二、问题原因 由于linux服务器缺少对应的字库导致文件转换出现乱码的 三、解决方式 1.将window中字体(c:\windows\fonts)放到linux…...

table中的td内部的元素不能与td等高的问题

解决该问题的办法: td标签内部的元素使用table布局&#xff0c;但是需要注意的是td必须设置高度&#xff0c;高度为任意值都可以&#xff0c;虽然设置了高度&#xff0c;但是td依然会被内部内容的高度撑开 <template><table><tr><td><div class&q…...

Layui + Flask | 实现数据表格修改(案例篇)(09)

此案例内容比较多,建议滑到最后点击阅读原文,阅读体验更佳。后续也会录制案例视频,将在本周内上传到同名的 b 站账号。 接下来演示用 flask + layui 搭建一个学员信息管理的案例 这个案例将会利用 flask 做后端,layui table 组件做前端,基于 restful api 完成一个学员信息…...

BCC源码编译和安装

接前一篇文章&#xff1a;BCC源码下载 1. 进入源码根目录 进入到BCC源码根目录。命令及结果如下&#xff1a; $ cd bcc ~/eBPF/BCC/bcc$ ls cmake CONTRIBUTING-SCRIPTS.md docs images libbpf-tools man scripts src CMakeLists.txt …...

linux上gitlab备份与还原

三 Gitlab备份 1.gitlab安装 1.1 添加镜像地址 添加镜像地址的目的是为了提高国内用户软件下载的速度&#xff0c;编辑(新建)文件gitlab-ce.repo&#xff0c;指令&#xff1a; vi /etc/yum.repos.d/gitlab-ce.repo复制 输入&#xff1a; [gitlab-ce] namegitlab-ce # 清华…...

【精华】具身智能:人工智能的下一个浪潮

从符号主义到联结主义&#xff0c;智能体与真实世界的交互得到日益重视。上世纪五十年代的达特茅斯会议之后的一段时期内&#xff0c;对人工智能的研究主要限于符号处理范式&#xff08;符号主义&#xff09;。符号主义的局限性很快在实际应用中暴露出来&#xff0c;并催动了联…...

AD覆铜时引脚‘粘’在一起了?别慌,三步排查法帮你搞定Modified Polygon和覆铜粘连

AD覆铜引脚粘连问题排查指南&#xff1a;从现象到解决方案的完整路径 在PCB设计过程中&#xff0c;覆铜操作看似简单却暗藏玄机。许多Altium Designer用户都曾遭遇过这样的场景&#xff1a;当你信心满满地完成布线&#xff0c;准备进行最后的覆铜操作时&#xff0c;突然发现不同…...

FreeVA:零训练成本,用图像大模型实现视频理解的新范式

1. 项目概述&#xff1a;一个无需训练的“零成本”视频助手 最近在折腾多模态大模型&#xff08;MLLM&#xff09;的时候&#xff0c;我发现了一个挺有意思的现象&#xff1a;大家一提到让模型理解视频&#xff0c;第一反应就是得搞“视频指令微调”。简单说&#xff0c;就是拿…...

VSCode调试C++项目全攻略:从CMake工程配置到Native Debug实战(含传参技巧)

VSCode调试C项目全攻略&#xff1a;从CMake工程配置到Native Debug实战&#xff08;含传参技巧&#xff09; 在当今的C开发环境中&#xff0c;高效调试已成为提升生产力的关键环节。对于使用CMake管理的中大型项目&#xff0c;如何在VSCode中实现无缝调试体验&#xff0c;是许多…...

Crystal语言Web框架实战:构建高性能API服务的轻量级方案

1. 项目概述&#xff1a;一个轻量级、高性能的Crystal语言Web框架最近在探索一些新兴的编程语言生态时&#xff0c;我注意到了Crystal语言&#xff0c;以及一个名为jvpflum/Crystal的GitHub仓库。乍一看这个标题&#xff0c;可能会让人有些困惑&#xff1a;这究竟是Crystal语言…...

Simulink仿真避坑指南:PWM控制48V直流电机时,轻载和重载下的参数设置与波形分析(附2018a源文件)

Simulink仿真避坑指南&#xff1a;PWM控制48V直流电机时&#xff0c;轻载和重载下的参数设置与波形分析 在工程实践中&#xff0c;直流电机的仿真建模是验证控制算法和预测系统性能的关键环节。特别是当面对不同负载条件时&#xff0c;如何准确设置电机参数并解读仿真波形&…...

构建AI助手持久记忆系统:Rekall项目实践与MCP协议应用

1. 项目概述&#xff1a;为你的AI助手构建一个“第二大脑”如果你和我一样&#xff0c;日常重度依赖 Claude Code、Cursor 这类AI编程助手&#xff0c;那你一定遇到过这个痛点&#xff1a;每次开启一个新的会话&#xff0c;AI助手就像得了“健忘症”&#xff0c;对之前讨论过的…...

终极指南:5分钟搭建SillyTavern AI聊天前端,解锁个性化角色对话体验

终极指南&#xff1a;5分钟搭建SillyTavern AI聊天前端&#xff0c;解锁个性化角色对话体验 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 想要创建专属的AI聊天伙伴&#xff0c;体验深度…...

如何高效使用炉石传说脚本:终极完整指南解决你的自动化难题

如何高效使用炉石传说脚本&#xff1a;终极完整指南解决你的自动化难题 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 你是否厌倦了炉石传说中重复性的…...

ctf show web 入门46

这道题目是上一题的升级版&#xff0c;过滤条件变得更加苛刻了。我们来分析一下新增的限制以及应对方案。 代码审计与变化 相比之前&#xff0c;正则过滤 preg_match 新增了以下内容&#xff1a; [0-9]&#xff1a;禁止使用任何数字。这意味着 $IFS$9 这种绕过方式失效了。 \$&…...

终极指南:Visual C++运行库一键修复完整教程

终极指南&#xff1a;Visual C运行库一键修复完整教程 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时突然弹出"无法启动此程序…...