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 <stdio.h>
#include <string.h>
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()函数打开指定文件失败的主要原因是该文件不存在。