代码编织梦想

一、初识

C语言中,有一个全局变量errno,存放了部分库函数调用过程中产生的错误码。
库函数的调用一般并不直接返回错误码,而是将错误码(是一个整数值,不同的值代表不同的含义)存入一个名为 errno 的全局变量中,errno 不同数值所代表的错误消息定义在 <errno.h> 文件中
如果库函数调用失败,可以通过读出 errno 的值来确定问题所在,推测程序出错的原因。
特别注意:

 1. 只有部分库函数才会设置全局变量errno的值。
 2. 当系统调用函数调用成功运行时,errno 的值不会被修改,当然也不会主动被置为 0。
 	也就是说如果上一次调用有错误代码写入errno,那么下一次调用成功这个errno还会是之前的错误值。
 	这也意味着errno不能作为调用库函数失败的标志

二、获取errno中错误码对应的消息描述方式

strerror和perror两个库函数,可以很方便地查看出错的详细信息。
1. perror
perror 在 <stdio.h> 中声明,用于在屏幕上最近一次系统错误码消息描述,在实际开发中,我们写的程序运行于后台。

2. strerror
strerror 在 <string.h> 中声明,用于获取错误码对应的消息描述。

函数声明:
char *strerror(int errno);

函数说明:strerror()用来依参数errno 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。

返回值:返回描述错误原因的字符串地址。

在gcc4.4.7版本中,定义了131个错误代码,我们用程序把它们全部显示出来(下面是示例程序):
#include <stdio.h>
#include <string.h>
 
int main()
{
  int errorno;
 
  for(errorno=0;errorno<132;errorno++)
  {
    printf("%d:%s\n",errorno,strerror(errorno));
  }
}
下面附上输出结果:

在这里插入图片描述

示例

#include <errno.h>
#include <stdio.h>

void main()
{
	FILE * fp=fopen("aaaa","r");
    if(fp==0)
    {   
        printf("%d %s\n",errno,strerror(errno));//strerror示例
        perror("perror res:");//perror示例
        printf("fopen failed!\n");//可以认为打出出问题的地方
        return ;
    }
    fclose(fp);
}

补充知识

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37233070/article/details/120902116

c语言 函数编程的常见错误-爱代码爱编程

 函数编程的常见错误: 1、定义函数时,函数头后面多加了分号 如:int sum(int a,int b) ;  //此处不应有分号         {……         } 2、定义函数时,虚参前面忘记写类型 如:int sum(a,b)       //每个虚参前面都应写上类型 {…… } 3、调用函数前忘记函数声明 除非是定义

网络编程socket相关错误号及信息的获取-爱代码爱编程

这里不讨论直接调用后,通过返回值返回错误号的情况,因为这种情况是比较简单的。而实际在网络编程中很多情况都是在发送和接收数据时出现了socket上有异常导致操作无法完成,而返回值只能涉及到操作相关的字节数和是否错误,并不能反映

c语言error返回值简单列表-爱代码爱编程

 下面是error相关的返回值    1#ifndef _ASM_GENERIC_ERRNO_BASE_H    2#define _ASM_GENERIC_ERRNO_BASE_H    3    4#define EPERM            1      /* Operation not permitted */操作禁止   

c错误处理_iamlinge的博客-爱代码爱编程

本文为个人学习笔记,仅用于个人学习、复习使用!     c语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值得形式允许您访问底层数据,在发生错误时,大多数的c或Unix函数调用返回1或NULL,同时会设置一个错误代码errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在errno.h头文件中找到各种各

c语言之打印错误信息_oscaner的博客-爱代码爱编程_c 打印错误信息

来源:我的博客站 OceanicKang |《C语言之打印错误信息》 标准输入 — stdin标准输出 — stdout标准错误输出 — stderr #include <stdio.h> #include

c语言系统错误信息-爱代码爱编程

         我们在写程序的时候需要调用C语言提供的库函数,并通过函数的返回值判断调用是否成功。其实在C语言中,还有一个全局变量errno,存放了函数调用过程中产生的错误码。        为防止和正常的返回值混淆,库函数的调用一般并不直接返回错误码,而是将错误码(是一个整数值,不同的值代表不同的含义)存入一个名为 errno 的全局变量中,err

C语言获取系统错误-爱代码爱编程

文章目录 一、strerror函数二、errno的细节1、调用库函数失败不一定会设置errno2、errno不能作为调用库函数失败的标志3、程序员可以不用errno三、课后作业四、版权声明 我们在写程序的时候需要调用C语言提供的库函数,并通过函数的返回值判断调用是否成功。其实在C语言中,还有一个全局变量errno,存放了函数调用过程中产生的错误码

C语言:自定义函数中调用自定义函数的方法-爱代码爱编程

自定义函数中调用自定义函数 在我们编写C语言程序时,可以将要经常用到的或者有自己单独作用的那一部分代码独立成一个函数,不仅可以简化我们的程序,还可以使我们的程序更加可见话。正文阿巴阿巴 方法一:直接调用先自定义几个函数。 int function1(int num1,int num2){ return num1 + num2; } int

python 主函数 捕获调用函数的异常_【Python】第六章 异常-爱代码爱编程

阅读量: 166 初次接触Python的学习笔记,部分作手册自查使用。如有错误或遗漏还请海涵,可评论或邮箱联系。 最后修改时间:2020-05-18 21:22:52 星期一 健壮程序的要求 在工业级代码中,必须要求开发的程序可以在收到异常后,针对性的做出处理 捕获异常语法 简单语法 try: # 尝试执行的代码 pass e

linux c 输出错误信息,C 错误处理-爱代码爱编程

C 错误处理 C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。 所以,C 程序员

c语言编译怎么查看错误,C语言编译器的错误信息-爱代码爱编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Not a valid expression format type 不合法的表达式格式 Not an allowed type 不允许使用的类型 Numeric constant too large 数值常太大 Out of memory 内存不够用 Parameter 'xxx' is nev

c语言中运用调用函数容易犯的错误,为什么这个函数只能调用一次,调用第2次机会出现错误...-爱代码爱编程

已结贴√ 问题点数:20 回复次数:7 为什么这个函数只能调用一次,调用第2次机会出现错误 # include # include struct pp { char *k; struct pp *cj; }; void sp(char *c,struct pp *pc,char *len1,int pl,cha

c语言各种输出错误提示,C语言错误处理-输出错误信息-爱代码爱编程

C语言错误处理-输出错误信息 程序开发过程中,不可避免地会因为细节疏忽导致程序的编译、运行出错,当出现错误时编译器一般会将错误信息展示出来,但由程序操作或用户输入导致的错误往往会使程序直接崩溃并无任何的提示,此时,就需要一种方法能够用在程序可能出错的地方,当错误发生时可以提前将错误信息输出并中止运行,避免程序的崩溃、简化程序bug的查找。下面介绍C语

c语言如何获取错误码,错误码列表-爱代码爱编程

错误码列表 公共错误码 错误码                                          说明 AuthFailure.InvalidSecretId                 密钥非法(不是云 API 密钥类型)。 AuthFailure.MFAFailure                  

c语言调用函数时段错误,c语言问题。。。-爱代码爱编程

满意答案 wlz0909 推荐于 2017.12.16 采纳率:48%    等级:7 已帮助:9人 1、 有如下程序 int func(int a,int b) { return(a+b); } main() { int x=2,y=5,z=8,r; r=func((x-y),z); printf("%d\n",r);