C++ strerror、errno、perror

2023-12-22 20:32:02

宏定义 errno
cerrno

errno是一个全局变量,用于存储最近一次发生的错误代码。

int

标准库的函数可以将errno设置为任何值(不仅仅是上面列出的可移植值)。特定的库实现可以在这个头文件中定义额外的名字。

c++ 11扩展了需要在这个头文件中定义的基本值集,包括许多在POSIX环境中也可用的名称,将可移植errno值的总数增加到78个。有关完整列表,请参阅errc。

与errno值相关的特定错误消息可以使用strerror获得,也可以使用perror函数直接打印。

在c++中,errno总是被声明为宏,但在C中,它也可以被实现为带有外部链接的int对象。


函数 strerror
cstring

strerror是一个函数,用于返回一个表示指定错误代码的字符串。

char * strerror ( int errnum );

获取指向错误消息字符串的指针
解释errnum的值,生成一个带有消息的字符串,该消息描述错误条件,就像库中的函数设置为errno一样。

返回的指针指向一个静态分配的字符串,该字符串不能被程序修改。对该函数的进一步调用可能会覆盖其内容(不需要特定的库实现来避免数据竞争)。

strerror产生的错误字符串可能是特定于每个系统和库实现的。

参数
errnum
错误代码

例子

/* strerror example : error list */
#include <stdio.h>
#include <string.h>
#include <errno.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ("unexist.ent","r");
  if (pFile == NULL)
    printf ("Error opening file unexist.ent: %s\n",strerror(errno));
  return 0;
}

可能的输出

Error opening file unexist.ent: No such file or directory


函数 perror
cstdio
perror是一个函数,它接受一个字符串作为参数,并根据当前的错误代码打印出相应的错误信息。

void perror ( const char * str );

打印错误信息
将errno的值解释为错误消息,并将其打印到stderr(标准错误输出流,通常是控制台),可选地在其前面加上str中指定的自定义消息。

errno是一个整型变量,它的值描述了调用库函数产生的错误条件或诊断信息(C标准库的任何函数都可以为errno设置一个值,即使在此参考中没有显式指定,即使没有发生错误),参见errno了解更多信息。

error产生的错误消息是依赖于平台的。

如果参数str不是空指针,则输出str,后跟冒号(:)和空格。然后,无论str是否为空指针,生成的错误描述都将打印出来,后跟一个换行字符(‘\n’)。

应该在错误产生后立即调用Perror,否则它可能会被对其他函数的调用覆盖。

参数
str
包含要在错误消息本身之前打印的自定义消息的C字符串。
如果是空指针,则不打印前面的自定义消息,但仍然打印错误消息。
按照惯例,应用程序本身的名称通常用作参数。

例子

/* perror example */
#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile=fopen ("unexist.ent","rb");
  if (pFile==NULL)
    perror ("The following error occurred");
  else
    fclose (pFile);
  return 0;
}

如果文件 unexist.ent 不存在,程序输出可能会出现类似的结果:

The following error occurred: No such file or directory

文章来源:https://blog.csdn.net/m0_60352504/article/details/135159674
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。