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。

链接:https://www.learnfk.comhttps://www.learnfk.com/c-programming/c-error-handling.html

来源:LearnFk无涯教程网

如果您的程序中有错误情况,并且您要退出程序,则应以状态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

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

技术教程推荐

浏览器工作原理与实践 -〔李兵〕

Linux内核技术实战课 -〔邵亚方〕

打造爆款短视频 -〔周维〕

MySQL 必知必会 -〔朱晓峰〕

零基础实战机器学习 -〔黄佳〕

Web漏洞挖掘实战 -〔王昊天〕

朱涛 · Kotlin编程第一课 -〔朱涛〕

中间件核心技术与实战 -〔丁威〕

程序员职业规划手册 -〔雪梅〕

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