Я хочу загрузить массив из файла, который я ранее сохранил. Я запускал код ниже, но по какой-то причине, когда я загружал массив, длина массива, которую я загружала, была не такой же, как длина массива, который я сохранил. Как изменить длину для загрузки файла, чтобы он работал для любой длины массива?Загрузка данных из файла в массив из c
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);
}
и сохраните 'len'. – BLUEPIXY
Кроме того, вам не нужно возвращать 'intarr_t *' из 'intarr_load_binary'. Вы можете просто вернуть 'intarr_t'. –
В любом случае, вы слишком часто проверяете ошибки. И ваш 'intarr_save_binary' возвращается до того, как появится возможность закрыть файл. – Deduplicator