【发布时间】:2020-05-09 10:09:26
【问题描述】:
我正在学习 C 的文件处理,但遇到了一些问题。 我写的代码如下,
# include <stdio.h>
# include <stdlib.h>
int main(void)
{
FILE * file;
errno_t err = fopen_s(&file,"f.txt","r");
fseek(file, 0, SEEK_END);
int size = ftell(file);
fseek(file, 0, SEEK_SET);
char *tmp;
tmp = malloc(size);
printf("%d\n", size);
for (int i = 0; !feof(file); i++)
{
fread(tmp + i, 1, 1, file);
size = i + 1;
}
printf("%d\n", size);
fclose(file);
free(tmp);
return 0;
但是size的输出不一样(1st: 78, 2nd: 76),这是什么原因呢?
【问题讨论】:
-
尝试以二进制模式打开文件(否则,在 Windows 中,库会将
"\r\n"转换为"\n") -
for (int i = 0; !feof(file); i++)-> Why is “while ( !feof (file) )” always wrong? -
为什么 feof 错误如此普遍? :(
-
@M.M:为什么
void main()错误如此普遍?我可以看到人们学习feof并决定以错误的方式使用它,但main只是死记硬背。谁教void main()? -
@EricPostpischil 是的,我也在问我同样的问题。看到它得到如此广泛的使用有点烦人也令人沮丧,尽管它是无意义的,每个现代编译器都应该给出一个诊断。