到目前为止,我已经掌握了EOF
在文本文件末尾自动插入一个特殊字符以指示其结束的知识。但我现在觉得有必要对此进行更多澄清。我检查了谷歌和维基百科页面,EOF
但他们无法回答以下问题,也没有确切的 Stack Overflow 链接。所以请帮助我:
我的书说二进制模式文件根据文件目录条目中存在的字符数来跟踪文件的结尾。(与具有特殊 EOF 字符来标记结尾的文本文件相反)。那么
EOF
二进制文件的背景是什么?我很困惑,因为在以下程序中,我在以二进制模式!=EOF
读取文件时成功使用了比较:.exe
#include<stdio.h> #include<stdlib.h> int main() { int ch; FILE *fp1,*fp2; fp1=fopen("source.exe","rb"); fp2=fopen("dest.exe","wb"); if(fp1==NULL||fp2==NULL) { printf("Error opening files"); exit(-1); } while((ch=getc(fp1))!=EOF) putc(ch,fp2); fclose(fp1); fclose(fp2); }
是
EOF
一个特殊的“字符”吗?或者它是维基百科所说的条件,计算机知道何时返回特定值(如-1
(EOF
在我的计算机上))的条件?这种“条件”的示例是字符读取函数完成读取所有存在的字符,或者字符/字符串 I/O 函数在读取/写入时遇到错误?有趣的是,堆栈溢出标签
EOF
混合了EOF
. 用于EOF
表示“在编程领域中,EOF 是一个字节序列(或一个字符)的标签,表示在此之后没有更多内容。” ,虽然它还在“关于”部分中说“文件结束(通常缩写为 EOF)是计算机操作系统中无法从数据源读取更多数据的情况。数据源通常称为文件或溪流。”
但我有一种强烈的感觉EOF
,它不会是一个角色,因为在 I/O 期间遇到错误时,其他所有函数似乎都会返回它。
如果你能帮我弄清楚这件事,你会非常好。