【发布时间】:2014-11-26 17:38:48
【问题描述】:
我想从我之前保存的文件中加载一个数组。我运行了下面的代码,但是由于某种原因,当我加载数组时,我加载的数组长度与我保存的数组长度不同。如何更改加载文件代码的长度,使其适用于任何数组长度?
intarr_t* intarr_load_binary( const char* filename )
{
unsigned int len = 0;
FILE *f = fopen (filename, "rb");
fscanf (f, "%d", len);
intarr_t* newia = malloc (sizeof(intarr_t));
assert (newia);
newia->data = malloc (len*sizeof(int));
assert(newia->data);
newia->len = len;
if (f != NULL)
{
while (!feof(f))
{
fscanf (f, "%d", newia->data);
}
}
else
{
return NULL;
}
fclose (f);
return newia;
}
我用于保存/加载的结构在这里:
typedef struct {
int* data;
unsigned int len;
} intarr_t;
我用来保存文件的代码在这里:
int intarr_save_binary( intarr_t* ia, const char* filename )
{
unsigned int len = ia->len;
FILE *f;
f = fopen (filename, "wb");
if (fwrite (ia->data, sizeof(int), len, f) == len)
{
return 0;
}
else
{
return 1;
}
fclose (f);
}
【问题讨论】:
-
另外,您不需要从
intarr_load_binary返回intarr_t*。你可以直接返回intarr_t。 -
无论如何,您对错误的测试过于谨慎。并且您的
intarr_save_binary在它有机会关闭文件之前返回。 -
@BLUEPIXY 我只是想澄清一下。保存 len 是什么意思?
-
@user3121023 添加 fread 后,我需要在加载函数中更改数组的长度吗?如果是这样,我应该将其更改为什么?现在我把它设置为 0。
-
要加载的记录数。