在C中分配动态数组结构

时间:2017-02-07 23:33:02

标签: c arrays struct malloc realloc

我今天的问题是我需要分配动态的结构数组。我编写了我的整个程序,但我遇到了seg错误,我相信这是因为我没有正确分配东西。总的来说,我想了解一些关于如何做到这一点的更多信息,以及我出错的地方。谢谢!

这是我的结构:

struct names {
    char *Name1;
    char *Name2;
};
struct names **namePointer = NULL;

这里是我想要为数组中的结构数分配的地方,其中numOfElems是一个变量,它将计算我需要多少次迭代。目前它被设置为1,每当我需要更多空间时它将增长一个:

numOfElems = 1;
*namePointer = realloc(*namePointer, sizeof( struct names) * numOfElems);

以下是我想要输入的方法,然后将结构的值存储在数组中。字符串之前已分配,然后重新分配字符数量,因为这是一个规范:

printf("Enter Name1: ");
fgets(namePointer[i]->Name1, 50, stdin);
stringLen = strlen(namePointer[i]->Name1) + 1;
namePointer[i]->Name1 = realloc(namePointer[i]->Name1, sizeof(char) * stringLen);

在循环结束时有一个" i ++"然后它再次完成整个过程,希望将下一个值提交到struct数组的下一个位置。我得到一个段错误,不知道为什么。如果有一种更简单的方法来动态分配结构数组,请分享!

再次感谢。

1 个答案:

答案 0 :(得分:1)

您需要空间来存储输入:

printf("Enter Name1: ");
fgets(namePointer[i]->Name1, 50, stdin); /* Name1 is an uninitialized pointer  */
stringLen = strlen(namePointer[i]->Name1) + 1;
namePointer[i]->Name1 = realloc(namePointer[i]->Name1, sizeof(char) * stringLen);

使用中间数组和strcpy

char temp[50];
printf("Enter Name1: ");
fgets(temp, sizeof temp, stdin);
stringLen = strlen(temp) + 1;
namePointer[i]->Name1 = realloc(namePointer[i]->Name1, sizeof(char) * stringLen);
strcpy(namePointer[i]->Name1, temp);

或者使用strdup(非标准但在许多实现中可用):

char temp[50];
printf("Enter Name1: ");
fgets(temp, sizeof temp, stdin);
namePointer[i]->Name1 = strdup(temp);