如果发生任何错误,大多数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