【问题标题】:Allocating array of struct with array inside分配带有数组的结构数组
【发布时间】:2015-12-19 18:45:50
【问题描述】:

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

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

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

所以我创造了

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

然后是这个结构的数组

line *Array = NULL;

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

【问题讨论】:

标签: c arrays struct malloc realloc


【解决方案1】:

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

1) 使用realloc() 函数;它就像 malloc 和 calloc 但你可以重新分配你的内存,正如名字所暗示的那样;

2) 使用链表;

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

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

} line;

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

【讨论】:

    【解决方案2】:

    你可以这样(伪代码)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2017-07-26
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2013-07-27
      相关资源
      最近更新 更多