C语言中errno与perror()函数

宏errno和perror()函数都是在stdlib.h中定义的。

1 stdlib.h头文件

stdlib.h头文件即standard library标准库函数头文件,包含了C、C++语言的最常用的系统函数,该文件中还包含了C语言标准库函数的定义。

2 errno宏

errno宏在stdlib.h中的定义为

#define errno (*_errno())

errno宏用于保存程序在运行中的错误代码(error code),以及用于显示错误信息的字符串。当程序运行时,errno宏被设置为0,一旦程序发生了系统级的错误,errno宏就会被设置为其它值。

3 strerror()函数

在“2 errno宏”中提到的errno宏获取到的错误信息是错误的索引号,可以通过strerror()函数获取该错误索引号对应的错误信息。strerror()函数在string.h头文件中定义,其格式为

char *strerror( int errnum );

其中,参数errnum是errno宏获取的错误索引号,该函数的返回值是错误信息。

4 perror()函数

perror()函数显示标准错误输出流stderr中的错误信息,该函数的格式为:

void perror( const char *message );

其中参数message为要显示的信息,该信息不包括保存在stderr中的错误信息。关于stderr,请参考《C++中fprintf()函数与stdout、stderr》

4 相关代码

以下代码通过两种方法实现了打印错误信息,一种是通过perror()函数,另一种是通过strerror()函数和errno。

#include 

#include 

int main()

{

FILE *stream;

if ((stream=fopen("crt_fopen.c", "r")) == NULL)

{

perror("perror says open failed");

printf("strerror says open failed: %s\n", strerror(errno));

}

else

{

printf("open succeeded on input file\n");

fclose(stream);

}

return 0;

}

在以上代码中,通过fopen()函数打开指定的文件,如果打开该文件失败,则fopen()函数的返回值是NULL,此时可以通过perror()函数或者strerror()函数显示错误信息。输出错误信息如图1所示。

图1 错误信息

从以上错误信息可以看出,fopen()函数打开指定文件失败的主要原因是该文件不存在。

你可能感兴趣的:(C++基础)