本文主要介绍两种错误错误报告函数:strerror和perror。
strerror主要用于字符串错误报告,perror则是以一种简单,统一的方式报告错误,perror适用范围更广,更简单。
strerror函数原型如下:
char *strerror(int errnum)
作用:把其中一个错误代码作为strerror作为参数,并返回一个用于描述错误的字符串的指针,简言之就是将错误码转换成错误提示(错误码变成字符串提示)。
用法如下:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main()
{
FILE *pfile;
pfile = fopen("unexist.ent", "rb");
if (pfile == NULL)
{
//perror("pfile");
printf("%d:%s\n", errno, strerror(errno));
}
else
fclose(pfile);
system("pause");
return 0;
}
perror函数原型如下:
void perror(const char *str)
例如打开一个不存在的文件,读取内容,操作系统的做法就是当发现错误时,报告错误。库函数提供了一个全局变量errno(在
#include <stdio.h>
#include <errno.h>
int main()
{
FILE *pfile;
pfile = fopen("unexist.ent", "rb");
if (pfile == NULL)
{
perror("pfile");
//printf("%d:%s\n", errno, strerror(errno));
}
else
fclose(pfile);
system("pause");
return 0;
}
如果perror函数的参数不为NULL,并且str所指向的内容不为空,则perror先打印这个字符串,然后跟着输出一个分号和一个空格,接着输出错误信息的提示。
注意:errno 只有在调用函数出问题时才会被设置值,而函数调用成功后也不会修改他的值,所以不能用errno来判断一个函数是否调用成功,例如下列做法则会报错。
void fun(void)
{
return 0;
}
int main()
{
fun();
if (errno ==0);
printf("helloworld\n");
return 0;
}
以前我们用strerror将所有错误码全部打印出来,其实我们也可以用perrno将所有错误码打印出来。
#include <stdio.h>
#include <errno.h>
int main()
{
int i = 0;
for (i = 0; i < 120; i++)
{
errno = i;
perror("");
}
system("pause");
return 0;
}