我有一个二进制文件与5长整型,一切工作如预期,但当我读文件中的最后一项文件指针返回NULL从func2和int结束func2文件指针仍然不是null,但当我回到func1我看到它变成了naull,你能帮我理解为什么吗?这是2个函数:
long int * func1(char * filename, int numOflogInts)
{
long int numbers[5];
FILE* fp = fopen(filename,"rb");
for (int i = 0; i < numOflogInts; i++) {
numbers[i] = func2(fp, i);
}
return numbers;
fclose(fp);
}
long int func2(FILE * fp, int place)
{
long int num;
fseek(fp, sizeof(long int) * place, SEEK_SET);//skip to the place
fread(&num, sizeof(long int), 1, fp);
return num;
}
1条答案
按热度按时间wnavrhmk1#
有几个错误:
func1
中,你返回了,* 然后 * 关闭了文件指针。但是因为返回,这个fclose
调用是不可达的。5
,而不是用numOflogInts
来确定数组的大小,你的循环表明这不是正确的做法。要解决第一个问题,请 * 动态地 * 分配数组。要解决第二个问题,请在返回之前关闭文件。
当然,您还希望检查内存分配和打开文件时的错误。