gpt4 book ai didi

c - 如何访问动态分配的结构数组中的项?

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:42 26 4
gpt4 key购买 nike

我现在正在上一门使用 C 的类(class),我的一项作业要求我使用我的教授为我们编写的结构。它实际上是两个结构,其中一个结构基本上包含第一个结构的数组。

这是他们的样子:

typedef struct cityStruct
{
unsigned int zip;
char *town
} city;
typedef struct zipTownsStruct
{
int *towns;
city **zips;
city *cities
} zipTowns;

这是我为 zipTowns 结构分配内存的函数:

void getArrs(zipTowns *arrs, int size)
{
arrs->towns = malloc(sizeof(int) * size);
arrs->zips = malloc(sizeof(city **) * size);
arrs->cities = malloc(sizeof(city *) * size);
}

据我所知,我在这里所做的是为一定数量的 intcity 指针和 city< 分配内存空间 结构,基于大小变量。我知道这基本上就是数组。

我无法理解如何访问这些数组并操作其中的项目。写这个给我一个错误:

strcpy(arrs.cities[0]->town, "testTown\0");

你可以在这里看到我正在尝试做什么。我想通过索引访问 zipTowns 结构中的每个“城市”并插入一个值。

如何访问这些动态分配的结构数组中的项目?

最佳答案

想到x->y作为(*x).y .

arrs不是结构,它是指向结构的指针,cities不是指向结构指针的指针,它只是指向结构的指针。

使用 arrs->cities[0].town而不是 arrs.cities[0]->town .

但是,您仍然没有为这些结构分配足够的空间。这应该使您更清楚地了解分配的用途,并且还应该为您的数据留出足够的空间:

arrs->towns = malloc(sizeof(*arrs->towns) * size);
arrs->zips = malloc(sizeof(*arrs->zips) * size);
arrs->cities = malloc(sizeof(*arrs->cities) * size);

对于第二个和第三个,您只分配了足够的空间来存储一个指针,而不是实际的数据类型。

通过这种方法,您将能够从 arrs->cities[0] 访问至 arrs->cities[9]您还可以访问每个 city 的成员通过做arrs->cities[<number>].<member> .

您也不需要故意以 null 终止您的字符串。这已经为您完成了。因此,您可以替换 "testTown\0""testTown" .

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

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