用数组分配struct数组

时间:2015-12-19 18:45:50

标签: c arrays struct malloc realloc

我想读取用户输入的字符串和数字组合,如下所示:

50:string one
25:string two blablabla
...

我不知道输入会有多少行,而且我也不知道字符串的最大长度。

所以我创造了

typdedef struct line
{ 
    int a
    char *string
} line;

然后是这个sturct的数组

line *Array = NULL;

现在我有一个循环,它读取一行并将其解析为temporaryString和temporaryA。如何重新分配数组以将这些数据复制到数组中?

2 个答案:

答案 0 :(得分:1)

有两种有效的选项可以做你想做的事:

1)使用realloc()功能;它就像malloc和calloc,但你可以重新记录你的记忆,正如名字所建议的那样;

2)使用链表;

第二个比第一个更复杂,但也非常有效。在您的情况下,简单的链接列表可以具有以下形式:

typdedef struct line
{ 
    int a;
    char *string;
    line *next;
    //line *prev;

} line;

每次添加节点时,都必须为新数据分配一个结构行,将下一个指针设置为NULL或自身,它是相同的,并将前一个下一个指针设置为您创建的新数据。这是一种简单的方法来手动执行realloc。只有当你需要从最后一个项目转到第一个项目时才需要prev指针;如果您不需要此功能,只需保存根指针(第一个)并仅使用下一个指针。

答案 1 :(得分:0)

你可以这样(伪代码)。

idx = 0;

while (input = read()) {
    temporaryString, temporaryA = parse(input);
    Array = realloc(Array, (idx + 1)*sizeof(line));
    Array[idx].a = temporaryA;
    Array[idx].string = malloc(strlen(temporaryString) + 1);
    strcpy(Array[idx].string, temporaryString);
    idx++;
}