如何在C中动态调整结构数组的大小

时间:2013-08-18 14:23:38

标签: c pointers struct malloc realloc

typedef struct
{    
    char tenantName[32];
    unsigned int IDNum;
    float rentAmount;
    unsigned int flatNum;
    unsigned int Num;

}database;

如何动态调整结构数组的大小,而不是像数据库记录那样静态地初始化[1000];

3 个答案:

答案 0 :(得分:1)

您可以使用calloc(N,SIZE)分配N个元素的数组,每个元素的大小为SIZE。

在你的情况下,它看起来像这样:

  

数据库* records = calloc(numdatabases,sizeof(* records));

至于重新调整数组的大小,您可以使用realloc(PTR,SIZE),这将重新调整PTR指向的先前分配的空间大小为SIZE。

在你的情况下你可以像这样缩小数组:

database *shrinkedrecords = realloc(records,NEWNUMBEROFARRAYS * sizeof(*records))

顺便说一下,在两个代码中,而不是放入sizeof(*记录),你可以把sizeof(数据库)都有效。

答案 1 :(得分:0)

在C中,你将使用malloc(获取内存),realloc(获取更多内存)和free(释放内存)。

dataType *ptr = malloc(sizeof(dataType)); //one record memory allocated

ptr = realloc(ptr, newSize);  //increases the size of the memory allocated

free(ptr); //releases all the memory

答案 2 :(得分:0)

database *record = malloc(1000*sizeof(database));

确保在使用后释放分配的内存。

free(records);