如何判断一个文件是否结束?
EOF 是 End Of File 的缩写。
在 C 语言中,它是在标准库中定义的一个宏。人们经常误认为 EOF 是从文件中读取的一个字符。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如 -1)。EOF 也不是文件中实际存在的内容。EOF 也不是只表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),它还能表示 I/O 操作中的读、写错误(通常可以用 ferror() 来检测)以及其它一些关联操作的错误状态。
int main() { // getline的测试 FILE* in_wr = fopen("testff.dat", "w"); fprintf(in_wr, "%s", "\x61\x09\x62\x09\x63\x0a\xff\x64\x09\x65\x09\x66"); fclose(in_wr); FILE* wr = fopen("out.dat", "w"); FILE* rd1 = fopen("testff.dat", "r"); size_t length = 0; char* raw_line = NULL; while (getline(&raw_line, &length, rd1) != -1) { printf("%s", raw_line); fprintf(wr, "%s", raw_line); } fclose(rd1); // fgetc 和 EOF的测试 printf("%s", "\n\n\n"); fprintf(wr, "%s", "\n\n\n"); FILE* rd2 = fopen("testff.dat", "r"); char ch = fgetc(rd2); while (ch != EOF) { printf("%c", ch); fprintf(wr, "%c", ch); ch = fgetc(rd2); } fclose(rd2); // fget int 和 feof()的测试 printf("%s", "\n\n\n"); fprintf(wr, "%s", "\n\n\n"); FILE* rd3 = fopen("testff.dat", "r"); int nCh = fgetc(rd3); while (!feof(rd3)) { printf("%c", nCh); fprintf(wr, "%c", nCh); nCh = fgetc(rd3); } printf("%s", "\n\n\n"); fprintf(wr, "%s", "\n\n\n"); fclose(rd2); fclose(wr); return 0; }
Yorking Alan