Как определить размер и выделить память для программирования массива структуры c - PullRequest
0 голосов
/ 24 мая 2018

Есть ли способ определить, сколько элементов должен иметь массив struct или выделить динамическую память для массива struct в C?Код открывает двоичный файл и считывает его в массив struct.Я могу разместить произвольное значение, например 3000, однако, когда я иду на печать, он дает мне значения мусора после окончания файла.Я ищу способ установить в моем массиве размер читаемого файла или ограничить его полезными данными.Я полагаю, что функция типа malloc () просто не смогла найти примеры со структурными массивами, которые не являются статичными.

#include "function.h"


int main() {
    FILE *fp; // file pointer

    STRUCTNAME structVar[]; //typdef array of structs

    fp = fopen("file.bin", "rb"); //binary file to read into array

    if(fp == NULL) { // error check file opening
        printf("error\n");

    } else {

    //while !feof to read file into array
    while(!feof(fp)) {
        fread(structVar, sizeof(structVar), 1, fp);

        printStructData(structVar);
    }

    fclose(fp); // closes file
    }
  return 0;
}

1 Ответ

0 голосов
/ 24 мая 2018
STRUCTNAME *structVar;

FILE* fp = fopen(...);
if(fp) 
{
  long fileSize;
  fseek(fp, 0 , SEEK_END);
  fileSize = ftell(fp);
  fseek(fp, 0 , SEEK_SET);
  structVar = malloc(sizeof(STRUCTNAME) * (fileSize / sizeof(STRUCTNAME) + 1));  //just in case if the file length is not exactly sizeof(STRUCTNAME) * n
  ...
  fclose(fp);
}
...