C 错误处理
C 错误处理
在发生错误时,C
函数调用返回 1
或 NULL
,同时会设置一个错误代码 errno
,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 <error.h>
头文件中找到各种各样的错误代码。
errno
可以通过以下两个方式来显示error
错误
perror()
函数显示您传给它的字符串,后跟一个冒号、一个空格和当前 errno 值的文本表示形式。stderror()
函数,返回一个指针,指针指向当前 errno 值的文本表示形式。
程序示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <errno.h>
#include <string.h>
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;
}
若unexist.txt
不存在,那么会发生错误,此时的执行结果应该为
1
2
3
Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory
被零除的错误
在进行除法运算时,不检查除数是否为零,这是程序员编程时常见的问题,会导致一个运行时错误。
为了避免这种情况发生,下面的代码在进行除法运算前会先检查除数是否为零:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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);
}
程序退出状态
通常情况下,程序成功执行完一个操作正常退出的时候会带有值 EXIT_SUCCESS。在这里,EXIT_SUCCESS 是宏,它被定义为 0。
如果程序中存在一种错误情况,当您退出程序时,会带有状态值 EXIT_FAILURE,被定义为 -1。所以,上面的程序可以写成:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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);
}
在Linux中,可以通过
echi $?
来查看运行完上一个程序后的退出状态
本文由作者按照 CC BY 4.0 进行授权