在关闭的文件上fprintf不应该失败吗?
请注意以下终端输出:
$cat fprintf-closed-file.c #include <stdio.h> int main() { FILE * ofile = fopen("/tmp/goo","w"); int success = fprintf(ofile,"Hello %sn","World!"); printf("Success: %dn",success); fclose(ofile); success = fprintf(ofile,"Trying again..."); printf("Success: %dn",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:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |