C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在关闭的文件上fprintf不应该失败吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
请注意以下终端输出

$cat fprintf-closed-file.c
#include <stdio.h>
int main()
{
    FILE * ofile = fopen("/tmp/goo","w");
    int success = fprintf(ofile,"Hello %s\n","World!");
    printf("success: %d\n",success);
    fclose(ofilE);
    success = fprintf(ofile,"Trying again...");
    printf("success: %d\n",success);
}
$clang -o fprintf-closed-file fprintf-closed-file.c
$./fprintf-closed-file
success: 13
success: 15
$cat /tmp/goo
Hello World!

C11标准的第7.21.6.1节说:

接下来是转换说明符的描述,但结尾为:

看来假定文件在第二次fprintf调用关闭,它应该会失败,但事实并非如此.我在Kubuntu Trusty 64位上使用Clang 4.0.1和GCC 4.8.4对此进行了测试.

我对标准的理解是否有缺陷,还是应该提交错误

解决方法

引用C99,7.19.3文件

从而:

fclose(ofilE);
success = fprintf(ofile,"Trying again...");

第二行从ofile读取,其中(在fclose之后)具有不确定的值.这有未定义的行为.

另见附件J.2:

大佬总结

以上是大佬教程为你收集整理的在关闭的文件上fprintf不应该失败吗?全部内容,希望文章能够帮你解决在关闭的文件上fprintf不应该失败吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。