使用内部数组分配结构数组
Allocating array of struct with array inside
我想读取用户输入的字符串和数字组合,如下所示:
50:string one
25:string two blablabla
...
我不知道输入会有多少行,我也不知道字符串的最大长度。
所以我创造了
typdedef struct line
{
int a
char *string
} line;
然后是这个结构的数组
line *Array = NULL;
现在我有了一个循环,它读取一行并将其解析为 temporaryString 和 temporaryA。如何重新分配数组以将这些复制到数组中?
有两个有效选项可以满足您的需求:
1) 使用realloc()
函数;它就像 malloc 和 calloc,但你可以重新分配你的内存,正如名字所暗示的那样;
2) 使用链表;
第二个比第一个复杂,但也确实有效。在您的情况下,一个简单的链表可以采用以下形式:
typdedef struct line
{
int a;
char *string;
line *next;
//line *prev;
} line;
每次添加节点时,都必须为新数据分配一个结构行,将 next 指针设置为 NULL 或自身,这是一样的,并将 previous next 指针设置为您创建的新数据。这是手动执行重新分配的简单方法。只有当您需要从最后一项转到第一项时才需要 prev 指针;如果不需要此功能,只需保存根指针(第一个)并仅使用下一个指针。
你可以像这样(伪代码)。
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++;
}
我想读取用户输入的字符串和数字组合,如下所示:
50:string one
25:string two blablabla
...
我不知道输入会有多少行,我也不知道字符串的最大长度。
所以我创造了
typdedef struct line
{
int a
char *string
} line;
然后是这个结构的数组
line *Array = NULL;
现在我有了一个循环,它读取一行并将其解析为 temporaryString 和 temporaryA。如何重新分配数组以将这些复制到数组中?
有两个有效选项可以满足您的需求:
1) 使用realloc()
函数;它就像 malloc 和 calloc,但你可以重新分配你的内存,正如名字所暗示的那样;
2) 使用链表;
第二个比第一个复杂,但也确实有效。在您的情况下,一个简单的链表可以采用以下形式:
typdedef struct line
{
int a;
char *string;
line *next;
//line *prev;
} line;
每次添加节点时,都必须为新数据分配一个结构行,将 next 指针设置为 NULL 或自身,这是一样的,并将 previous next 指针设置为您创建的新数据。这是手动执行重新分配的简单方法。只有当您需要从最后一项转到第一项时才需要 prev 指针;如果不需要此功能,只需保存根指针(第一个)并仅使用下一个指针。
你可以像这样(伪代码)。
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++;
}