C语言 - 错误处理

C语言 - 错误处理 首页 / C语言入门教程 / C语言 - 错误处理

如果发生任何错误,大多数C甚至Unix函数调用都会返回-1或NULL并设置错误代码errno, 您可以在<error.h>头文件中找到各种错误代码。

errno,perror()和strerror()

C编程语言提供了 perror()和 strerror()函数,可用于显示与 errno 相关的文本消息。

  • perror()      -  函数显示传递给它的字符串,后跟一个冒号,一个空格,然后是当前errno值的文本表示形式。

  • strerror()    -  函数,该函数返回指向当前errno值的文本表示形式的指针。

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

extern int errno ;

int main () {

   FILE * pf;
   int errnum;
   pf=fopen ("unexist.txt", "rb");
	
   if (pf == NULL) {
   
      errnum=errno;
      fprintf(stderr, "Value of errno: %d\n", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
   } else {
   
      fclose (pf);
   }
   
   return 0;
}

编译并执行上述代码后,将产生以下输出-

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

除以零错误

一个普遍的问题是,在除以任何数字时,程序员不会检查除数是否为零,最终会产生运行时错误。

#include <stdio.h>
#include <stdlib.h>

main() {

   int dividend=20;
   int divisor=0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(-1);
   }
   
   quotient=dividend/divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(0);
}

编译并执行上述代码后,将产生以下输出-

Division by zero! Exiting...

退出状态

通常的做法是,在成功操作后程序退出后,使用EXIT_SUCCESS值退出,在这里,EXIT_SUCCESS是一个宏,它定义为0。

如果您的程序中有错误情况,并且您要退出程序,则应以状态EXIT_FAILURE定义为-1退出,因此,让我们将上述程序编写如下:

#include <stdio.h>
#include <stdlib.h>

main() {

   int dividend=20;
   int divisor=5;
   int quotient;
 
   if( divisor == 0) {
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(EXIT_FAILURE);
   }
	
   quotient=dividend/divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(EXIT_SUCCESS);
}

编译并执行上述代码后,将产生以下输出-

Value of quotient : 4

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

赵成的运维体系管理课 -〔赵成〕

玩转Git三剑客 -〔苏玲〕

玩转webpack -〔程柳锋〕

小马哥讲Spring核心编程思想 -〔小马哥〕

RPC实战与核心原理 -〔何小锋〕

手机摄影 -〔@随你们去〕

业务开发算法50讲 -〔黄清昊〕

React Native 新架构实战课 -〔蒋宏伟〕

结构写作力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)