动态数组内的动态数组

时间:2015-12-29 18:32:26

标签: c arrays

我在这里有一些示例代码,我认为这些代码可以解决我的问题。

Basicaly我需要存储一个数组,该数组具有可变数量的条目,其原因可变。这个array[5].b[3]不被允许吗?有什么替代方案吗?

提前致谢

typedef struct {
   int a;
   char *reasons;
}t_a;

f() {
   int space=10,spaceReasons=5;
   t_a *array;
   array=NULL;

   array=realloc(array,sizeof(t_a)*space);
   array[5].reasons=realloc(array[5].reasons,sizeof(char)*spaceReasons);
   fgets (array[5].reasons[3]),300, stdin);
   free(array);
}

1 个答案:

答案 0 :(得分:1)

这是一个有效的例子:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
    int a;
    char* reasons;
} t_a;

int main(void) {
    int space = 10, spaceReasons = 5;
    t_a* array = NULL;

    array = realloc(array, sizeof(t_a) * space);
    for (int i = 0; i < space; i++) {
        array[i].reasons = NULL;
        array[i].reasons = realloc(array[i].reasons, sizeof(char) * spaceReasons);

        // fill with fgets
        fgets (array[i].reasons, spaceReasons, stdin);
    }

    // print results
    for (int i = 0; i < space; i++) {
        printf("%s\n", array[i].reasons);
    }

    // first free all reasons
    for (int i = 0; i < space; i++) {
        free(array[i].reasons);
    }
    // then free array
    free(array);
}