Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ferror()返回值的消息文本_C++_C_Error Handling_Io - Fatal编程技术网

C++ ferror()返回值的消息文本

C++ ferror()返回值的消息文本,c++,c,error-handling,io,C++,C,Error Handling,Io,如何获取int ferror(文件*)返回的错误代码信息?对于errno有char*strerror(int)。ferror返回的代码是什么?如果char*strerror(int)也适用于此,那么我需要它的参考(我找不到此情况的任何指示器)。来自: 函数的作用是测试流指向的流的错误指示器 这意味着ferror返回一个布尔值,告诉您是否有错误,仅此而已。但是根据POSIX规范,errno的值在出现故障时将包含一个错误代码。库libexplain可以为ferror返回字符串。 从文档中: if (

如何获取int ferror(文件*)返回的错误代码信息?对于
errno
char*strerror(int)
。ferror返回的代码是什么?如果
char*strerror(int)
也适用于此,那么我需要它的参考(我找不到此情况的任何指示器)。

来自:

函数的作用是测试流指向的流的错误指示器


这意味着
ferror
返回一个布尔值,告诉您是否有错误,仅此而已。但是根据POSIX规范,
errno
的值在出现故障时将包含一个错误代码。

libexplain
可以为ferror返回字符串。 从文档中:

if (ferror(fp) < 0)
{
    fprintf(stderr, "%s\n", explain_ferror(fp));
    exit(EXIT_FAILURE);
}
if(铁磁(fp)<0)
{
fprintf(stderr,“%s\n”,explain_feror(fp));
退出(退出失败);
}

ferror
仅告诉您是否设置了流的错误指示器。您无法从中获取错误消息。(至少不能随身携带。)只是为了提醒一下:这些函数不应该失败,也不应该设置外部变量errno。“所有标准文件*函数也会设置errno on error”-我不怀疑这一点,但我找不到它的任何文档。cppreference.com上的C库参考没有提到它(例如),我的本地macOS手册页和在线Linux手册页也没有提到。我发现的关于errno的唯一声明是保证
ferror
不会设置它。更新:文档会记录它:“如果发生写入错误,应设置流的错误指示器,[CX][Option Start],并设置errno以指示错误。”似乎在所有其他文档中都应该省去一件重要的事情。@JensAlfke注意:“只要在本国际标准的函数描述中没有记录errno的使用,则无论是否存在错误,库函数调用都可以将errno的值设置为非零。”这意味着如果一个函数没有文档化来设置
errno
,那么它可以自由地以它可能希望的任何方式使用该值。因此,如果您的实现和C标准没有记录对函数使用的
errno
,那么如果调用该函数,您不能依靠它保持不变。您知道为什么这里的示例测试小于0,而ferror手册页只说非零表示错误吗?