我今天的问题是我需要分配动态的结构数组。我编写了我的整个程序,但我遇到了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数组的下一个位置。我得到一个段错误,不知道为什么。如果有一种更简单的方法来动态分配结构数组,请分享!
再次感谢。
答案 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);