C语言-EOF和feof()判断文件结尾的区别

今天获取一个图片内容时, fopen("aaaaaa.png", "r"), 读取完文件头就停止了, 后来模式改为 "rb" 就可以了, 特此记录下;

由于字符的ASCII码不可能出现 -1, 因此EOF定义为 -1 是合适的

当以文本形式读取文件内容, 读入的字符值等于EOF时, 表示读入的已不是正常的字符而是文件结束符

当以二进制形式读取文件内容, 信息都是以数值方式存在的, EOF的值可能就是所要处理的二进制文件中的信息, 此时需要用 feof() 来判断是否到达了文件结尾

即EOF可以作为文本文件的结束标志, 但不能作为二进制文件的结束符, feof函数既可以判断二进制文件, 又可以判断文本文件

读写文本或二进制形式时的区别:

  1.二进制和文本文件在内存中存储方式是一样的, 只是二进制无法找到一个合适的编码对其字节进行解码展现, 故而展示乱码(参考:http://www.cnblogs.com/JohnABC/p/3478134.html)

  2.二进制方式读文件时, 会原封不动的读出文件的全部內容, 写的時候, 也是把內存缓冲区的內容原封不动的写到文件中

  3.文本方式在读文件时, 会将换行符号CRLF(0x0D 0x0A)全部转换成单个的0x0A, 并且当遇到结束符CTRLZ(0x1A)时, 就认为文件已经结束, 相应的, 写文件时, 会将所有的0x0A换成0x0D0x0A, 所以, 若使用文本方式打开二进制文件时, 就很容易出现文件读不完整, 或內容不对的错误, 即使是用文本方式打开文本文件, 也要谨慎使用, 比如复制文件, 就不应该使用文本方式

Linux下带不带 "b" 是相同的

可以参考:http://www.cnblogs.com/JohnABC/p/4588565.html

原文地址:https://www.cnblogs.com/JohnABC/p/4588676.html