gpt4 book ai didi

c - 在 C 中分配动态结构数组

转载 作者:行者123 更新时间:2023-11-30 15:00:28 24 4
gpt4 key购买 nike

我今天的问题是我需要分配一个动态结构数组。我已经编写了整个程序,但出现了段错误,我相信这是因为我没有正确分配内容。总的来说,我只是想要更多关于如何做到这一点以及我哪里出错的信息。谢谢!

这是我的结构:

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

这里是我想要分配数组中结构数量的地方,其中 numOfElems 是一个变量,它将计算我需要的迭代次数。目前它设置为 1,每次我需要更多空间时就会增加 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++”,然后它再次经历整个过程,以希望将下一个值提交到结构数组中的下一个位置。我遇到了段错误,但不确定原因。如果有更简单的方法来动态分配结构数组,请分享!

再次感谢。

最佳答案

您需要空间来存储输入:

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

关于c - 在 C 中分配动态结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com