C语言 错误处理

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

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