如果发生任何错误,大多数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</span><span class="pun">=</span><span class="pln">errno</span><span class="pun">;</span><span class="pln">
fprintf</span><span class="pun">(</span><span class="pln">stderr</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Value of errno: %d\n"</span><span class="pun">,</span><span class="pln"> errno</span><span class="pun">);</span><span class="pln">
perror</span><span class="pun">(</span><span class="str">"Error printed by perror"</span><span class="pun">);</span><span class="pln">
fprintf</span><span class="pun">(</span><span class="pln">stderr</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Error opening file: %s\n"</span><span class="pun">,</span><span class="pln"> strerror</span><span class="pun">(</span><span class="pln"> errnum </span><span class="pun">));</span><span class="pln">
} else {
fclose </span><span class="pun">(</span><span class="pln">pf</span><span class="pun">);</span><span class="pln">
}
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