如何为struct array c编程确定大小并分配内存

时间:2018-05-24 15:23:04

标签: c arrays struct dynamic-memory-allocation file-handling

有没有办法确定一个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 :(得分:0)

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);
}