根据 the C standard,fgetc返回的任何字符以unsigned char值的形式返回,“转换为int”(该引号来自C标准,表示确实有一个转换).
当sizeof(int)== 1时,许多unsigned char值超出范围.因此,这些无符号字符值中的一些可能最终被转换为EOF的int值(转换结果为“implementation-defined or an implementation-defined signal is raised”),尽管该文件实际上不是错误的或最终的,文件状态.
我很惊讶地发现这样的实现实际上存在. TMS320C55x CCS manual文档UCHAR_MAX具有对应的值65535,INT_MAX具有32767,fputs和fopen支持二进制模式…更令人惊讶的是,它似乎将环境描述为完全符合,完整的实现(负信号).
The C55x C/C++ compiler fully conforms to the ISO C standard as defined by the ISO specification …
The compiler tools come with a complete runtime library. All library
functions conform to the ISO C library standard. …
这样的一个实现可以返回一个值,表示没有,真的完全符合的错误?这可以证明在循环的条件部分使用feof和ferror(像看起来那样可怕)吗?例如,while((c = fgetc(stdin))!= EOF ||!(feof(stdin)|| ferror(stdin))){…}
解决方法
原文地址:https://www.jb51.cc/c/116081.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。