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

C 标准库 - <errno.h>

在C语言编程中,<errno.h> 头文件扮演着至关重要的角色,它提供了一个全局变量 errno 以及一系列预定义宏,用于指示系统调用或库函数执行过程中发生的错误。这些宏有助于程序员诊断和处理运行时错误。

errno 变量

extern int errno;

errno 是一个外部整型变量,它被C标准库中的特定函数设置为不同的非零值以指示不同类型的错误。当程序启动时,默认情况下其值被初始化为零。

示例:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>int main() {char *large_number = "1e309"; // 尝试转换超过double最大值的字符串errno = 0; // 清零errnodouble result = strtod(large_number, NULL);if (errno == ERANGE) {perror("strtod failed: ");printf("The input number was too large for a double.\n");} else {printf("strtod succeeded with value: %f\n", result);}return 0;
}

在这里插入图片描述

在这个例子中,我们尝试将字符串 “1e309” 转换为 double 类型。由于这个数值超出了 double 类型的最大表示范围,理论上讲,在某些实现中,当调用 strtod 函数时,errno 应该会被设置为 ERANGE。这意味着转换过程中发生了范围错误,并且程序会打印出相应的错误信息。

错误代码宏

EDOM(Domain Error)

#define EDOM      33

当数学函数的输入参数超出了函数所定义的有效域时,例如计算对数函数 (log) 的负数参数,errno 将被设置为 EDOM

ERANGE(Range Error)

#define ERANGE    34

如果数学函数的结果超出所能表示的范围(如 strtod 解析出的数字太大无法存储),或者指定位移运算超过了类型的最大值,此时 errno 将被设置为 ERANGE

示例:

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <syslimits.h>int main() {errno = 0;double inf_result = log(-1.0); // 对于负数计算对数触发EDOM错误if (errno == EDOM) {perror("log function encountered domain error: ");// 输出可能为 "log function encountered domain error: Numerical argument out of domain"}errno = 0;long large_num = LONG_MAX;long overflow_result = large_num + 1; // 超出long类型最大值,触发ERANGE错误if (errno == ERANGE) {perror("Integer overflow occurred: ");// 输出可能为 "Integer overflow occurred: Result too large"}return 0;
}

在这里插入图片描述

通过检查并理解 errno 的值及其对应的错误宏,程序员能够更好地处理可能出现的异常情况,并确保程序的健壮性和可靠性。值得注意的是,每次读取 errno 前都应该先将其值保存下来,因为某些库函数可能会覆盖 errno 的值而并非总是错误发生的原因。此外,应当结合使用 perror() 函数来打印出与 errno 相关的错误信息。

相关文章:

C 标准库 - <errno.h>

在C语言编程中&#xff0c;<errno.h> 头文件扮演着至关重要的角色&#xff0c;它提供了一个全局变量 errno 以及一系列预定义宏&#xff0c;用于指示系统调用或库函数执行过程中发生的错误。这些宏有助于程序员诊断和处理运行时错误。 errno 变量 extern int errno;err…...

基于springboot+vue的房屋租赁管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

Sora----打破虚实之间的最后一根枷锁----这扇门的背后是人类文明的晟阳还是最后的余晖

目录 一.Sora出道即巅峰 二.为何说Sora是该领域的巨头 三.Sora无敌的背后究竟有怎样先进的处理技术 1.Spacetime Latent Patches 潜变量时空碎片&#xff0c;建构视觉语言系统 2.扩散模型与Diffusion Transformer&#xff0c;组合成强大的信息提取器 3.DiT应用于潜变量时…...

C语言之static关键字详解

C语言之static关键字详解_c语言static-CSDN博客 1.变量 2.局部变量和全局变量 3.变量的作用域 4.变量的生命周期 二、static关键字的作用 三、static关键字修饰局部变量 四、static关键字修饰全局变量 五、static关键字修饰函数...

Redis高性能原理

redis大家都知道拥有很高的性能&#xff0c;每秒可以支持上万个请求&#xff0c;这里探讨下它高性能的原理。单线程架构和io多路复用技术。 一&#xff0c;单线程架构 单线程架构指的是命令执行核心线程是单线程的&#xff0c;数据持久化、同步、异步删除是其他线程在跑的。re…...

MSS与cwnd的关系,rwnd又是什么?

慢启动算法是指数递增的 这种指数增长的方式是慢启动算法的一个核心特点&#xff0c;它确保了TCP连接在开始传输数据时能够快速地探测网络的带宽容量&#xff0c;而又不至于过于激进导致网络拥塞。具体来说&#xff1a; 初始阶段&#xff1a;当TCP连接刚建立时&#xff0c;拥…...

解决两个MySQL5.7报错

目录 1.启动不了MySQL&#xff0c;报错缺少MSVCR120.dll去官网下载vcredist_x64.exe运行安装进入管理员CMD 2.本地计算机 上的 mysql 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止&#xff0c;Fatal error: Can‘t open and lock privilege tables: Table ‘…...

[OpenAI]继ChatGPT后发布的Sora模型原理与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…...

机器人初识 —— 电机传动系统

一、背景 波士顿动力公司开发的机器人&#xff0c;其电机传动系统是其高性能和动态运动能力的核心部分。电机传动系统通常包括以下几个关键组件&#xff1a; 1. **电动马达**&#xff1a;波士顿动力的机器人采用了先进的电动马达作为主要的动力源&#xff0c;如伺服电机或步进…...

安卓游戏开发之音频技术优劣分析

一、引言 在安卓游戏开发中&#xff0c;音频处理技术扮演着至关重要的角色&#xff0c;它不仅能够增强游戏的沉浸感和玩家体验&#xff0c;还能通过声音效果传达关键的游戏信息。以下将对几种常见的安卓游戏音频处理技术进行优劣分析&#xff0c;并结合应用场景来阐述其特点。 …...

在C语言中,设置Linux系统时间

C 语言中使用 mktime 函数和 stime 函数来处理时间。 处理之前&#xff0c;需要先获取当前的时间戳。并使用当前的时间戳生成struct tm&#xff0c;struct tm是C语言中用于表示日期和时间的结构体&#xff0c;通常用于在程序中操作和处理日期时间信息。它包含了以下成员变量&a…...

golang k8s包管理工具

k8s包管理工具Helm Helm简介Helm基础概念Helm安装Helm命令Helm Chart&#xff08;图表&#xff09;Chart语法Chart变量替换Chart模板控制结构Chart模板函数Chart迭代和范围Helm Values&#xff08;值&#xff09;Helm Release&#xff08;发布&#xff09;Helm Repository&…...

数字信号处理:傅里叶分析

本文主要参考视频如下&#xff1a; 数字信号处理9-1_线性时不变系统对复指数信号的响应_哔哩哔哩_bilibili 傅里叶分析的主要研究内容如下所示&#xff1a; 注意&#xff0c;计算机中使用的离散傅里叶变换并不是离散时间傅里叶变换&#xff1b; 前四种都是理论上的变换方式&…...

pat 甲级 1051 Pop Sequence

思想:如果要弹出一个数&#xff0c;那么说明比它小的数字已经进栈了&#xff0c;所以要在一个数num输入之后把比它小的数都输入到栈中&#xff0c;直到栈满或者valnum时结束入栈操作。如果valnum&#xff0c;将这个值弹出&#xff0c;否则说明整个序列存在问题&#xff0c;把fl…...

Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)

上篇文章介绍了线稿约束&#xff0c;这篇文章介绍下深度Depth 文章目录 一、选大模型二、写提示词三、基础参数设置四、启用ControlNet 顾名思义&#xff0c;就是把原图预处理为深度图&#xff0c;而深度图可以区分出图像中各元素的远近关系&#xff0c;那么啥事深度图&#xf…...

Rust-知多少?

文章目录 前言1.使用下划线开头忽略未使用的变量2. 变量解构3.常量4.变量遮蔽&#xff08;shadowing&#xff09;5. 类似println!("{}", x); 为啥加感叹号6.单元类型7. -> 运算符到哪去了&#xff1f;总结 前言 Rust 学习系列&#xff0c;记录一些rust使用小技巧…...

Qt不规则可移动窗体的实现

实现&#xff1a; 可以借助不规则的位图来实现不规则窗体&#xff0c;并支持拖动和移动。下面分别是头文件和源文件 #ifndef SHAPEWIDGET_H #define SHAPEWIDGET_H#include <QWidget>class ShapeWidget : public QWidget {Q_OBJECTpublic:ShapeWidget(QWidget *parent …...

Jakarta Bean Validation

Validation 官网 https://beanvalidation.org/ 常见注解 Bean Validation中定义的注解&#xff1a; 注解详细信息Null被注释的元素必须为 nullNotNull被注释的元素必须不为 nullAssertTrue被注释的元素必须为 trueAssertFalse被注释的元素必须为 falseMin(value)被注释的元素…...

Flink Catalog 解读与同步 Hudi 表元数据的最佳实践

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…...

git 使用总结

文章目录 git merge 和 git rebasegit mergegit rebase总结 git merge 和 git rebase git merge git merge 最终效果说明&#xff1a; 假设有一个仓库情况如下&#xff0c;现需要进行 merge&#xff1a; merge 操作流程&#xff1a; merge 的回退操作&#xff1a; git reba…...

网易云音乐NCM格式转换:三步解密法让音乐自由播放

网易云音乐NCM格式转换&#xff1a;三步解密法让音乐自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲&#xff0c;却发现只能在特定播放器中欣赏&#xff1f;当你想要在其他设备或播放…...

SQL注入技术详解:从联合查询到盲注实战

前言&#xff1a; 继续开始我们的SQL注入吧&#xff01;本文详细讲解SQL注入的各类技术&#xff0c;包括联合查询、报错注入、布尔盲注、时间盲注、UA注入、Referer注入等&#xff0c;涵盖漏洞判断、利用方法和实战步骤。内容基于MySQL 5.0以上环境&#xff0c;围绕information…...

LabVIEW虚拟仪表:数据流编程与测控应用的核心交互范式

1. 项目概述&#xff1a;为什么虚拟仪表是LabVIEW的灵魂如果你用过LabVIEW&#xff0c;或者哪怕只是看过它的界面&#xff0c;第一印象大概率是那些花花绿绿的旋钮、开关、仪表盘和波形图。很多人觉得这就是LabVIEW的“皮肤”&#xff0c;一个为了让程序看起来像真实仪器而做的…...

G-Helper深度解析:如何用1MB工具彻底替代华硕Armoury Crate

G-Helper深度解析&#xff1a;如何用1MB工具彻底替代华硕Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenboo…...

多平台布局时代,店群账号高效管控之道

在电商行业持续精细化运营的当下&#xff0c;店群模式仍是商家拓宽渠道、分散风险、提升规模效应的主流选择。伴随抖店、拼多多、TikTok Shop、Temu、亚马逊等国内外平台规则趋严&#xff0c;多店铺账号管理已成为制约店群商家稳定经营的关键瓶颈。传统依赖人工登记、多设备登录…...

第12期:综合优化与结业项目(工程落地与量产调优)

一、本期课程简介本期为整套TinyML嵌入式实战课程的收官总结阶段&#xff0c;旨在帮助学员打通技术壁垒&#xff0c;完成从零散知识点积累到系统化工程落地能力的蜕变。课程将全面梳理前序所有实战项目技术栈&#xff0c;涵盖传感器数据采集、数据集预处理、神经网络模型轻量化…...

环境科学论文降AI工具免费推荐:2026年环境科学研究生毕业论文降AI知网维普99.26%4.8元完整指南

环境科学论文降AI工具免费推荐&#xff1a;2026年环境科学研究生毕业论文降AI知网维普99.26%4.8元完整指南 整理了一份环境科学论文降AI的完整选购指南&#xff0c;按性价比排序。 首推嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;99.2…...

GitLab SSH Key配置全流程复盘:从生成、复制到验证,一个命令解决‘Permission denied’

GitLab SSH Key配置全流程&#xff1a;从零开始到高效验证的完整指南 当你第一次在终端看到Permission denied (publickey)这个刺眼的红色错误时&#xff0c;那种挫败感我太熟悉了。三年前我刚接触GitLab时&#xff0c;花了整整一个下午才搞明白SSH Key配置的完整逻辑。本文将带…...

C语言实现终端菜单系统:从字符串解析到表驱动设计

1. 项目概述&#xff1a;为什么我们需要一个终端菜单系统&#xff1f;在嵌入式开发、服务器运维或者任何需要在纯命令行终端环境下工作的场景里&#xff0c;我们打交道最多的就是一个“黑框框”。这个黑框框&#xff0c;也就是终端&#xff0c;功能强大但交互原始。每次调试、测…...

电子项目布线指南:从导线、电缆到连接器的核心选型与避坑

1. 项目概述&#xff1a;为什么“线”比“电路”本身更重要&#xff1f;干了十几年电子项目&#xff0c;从学生时代的第一个闪烁LED&#xff0c;到后来复杂的机器人系统和工业控制器&#xff0c;我踩过最多的坑&#xff0c;往往不是芯片选型或代码逻辑&#xff0c;而是那些看起…...