我今天的问题是需要分配一个结构的动态数组。我已经对我的整个程序进行了编码,但我遇到了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);