在C中分配结构的动态数组



我今天的问题是需要分配一个结构的动态数组。我已经对我的整个程序进行了编码,但我遇到了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++",然后它再次经历整个过程,希望将下一个值提交到结构数组中的下一个位置。我有一个seg错误,不确定为什么。如果有更简单的方法可以动态分配结构数组,请分享!

再次感谢。

您需要空间来存储输入:

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);

相关内容

  • 没有找到相关文章

最新更新