gpt4 book ai didi

c - 来自 fputc 的 EOF 是否总是意味着 ferror 返回 true?

转载 作者:行者123 更新时间:2023-12-03 20:02:22 26 4
gpt4 key购买 nike

一个简单的问题,我对答案有 99.99% 的把握,但寻求一些反馈,以便我对自己的理解有 100% 的信心。当fputc返回 EOF它只是在流错误​​正确吗?例如,假设我有一个非常小的空间要写入,并且已到达空间的末尾,fputc会返回 EOF作为错误而不是实际文件结束?换句话说,这样的事情不是必需的?

ch = fputc(c, stream);
if(ch == EOF) {
if(ferror(stream)) {
// error
} else {
// EOF
}
}
因为如果 fputc返回 EOF我可以安全地假设 ferror(stream)将始终返回非 0?
我在这里搜索了答案,如果这是一个重复的问题,我深表歉意,但我在这里相对较新,还没有完全掌握搜索知识库的艺术。

最佳答案

¶7.21.7.3 The fputc function ¶3 ,C 标准说:

The fputc function returns the character written. If a write error occurs, the error indicator for the stream is set and fputc returns EOF.


所以,对于 fputc() ,根据标准,你的论点是正确的。如果设备上没有剩余空间或输出流已关闭(管道或套接字)或……则发生了输出错误,并且 fputc()将返回 EOF (最终,当流刷新其缓冲区时)和 ferror()将报告流有错误。 fgetc() 的讨论会有所不同和输入功能。
然后 ferror()测试文件流上的错误,但 feof() EOF 测试。
您应该谨慎使用 feof()ferror()带有输入函数——特别是,见 while (!feof(file)) is always wrong .
您的使用是可以接受的 - 您正在检查输出函数 ( fputc() ) 返回 EOF。如果输入函数报告失败,那也是正确的——然后你可以检查 feof()ferror() .
您可以使用 clearerr()在流上清除错误和 EOF 指示符。

关于c - 来自 fputc 的 EOF 是否总是意味着 ferror 返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65413798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com