【发布时间】:2020-09-10 19:54:42
【问题描述】:
我在访问我的结构中的双指针结构时遇到问题。
typedef struct monster
{
char *name;
char *element;
int population;
} monster;
typedef struct region
{
char *name;
int nmonsters;
int total_population;
monster **monsters;
} region;
region **
readRegion (FILE * infile, int *regionCount)
{
region **temp;
char garbage[50];
char garbage2[50];
char rName[50];
int monsterNum;
fscanf (infile, "%d %s", regionCount, garbage);
temp = malloc (*regionCount * sizeof (region *));
for (int i = 0; i < *regionCount; i++)
{
fscanf (infile, "%s%d%s", rName, &monsterNum, garbage2);
temp[i] = createRegion (inFile, rName, monsterNum);
}
return temp;
}
region *
createRegion (FILE * inFile, char *rName, int nMonsters)
{
region *r = malloc (sizeof (region));
char rMonster[50];
int rLength;
r->name = malloc ((strlen (rName) + 1) * sizeof (char));
strcpy (r->name, rName);
r->nmonsters = nMonsters;
for (int i = 0; i < nMonsters; i++)
{
r->monsters.name = (nMonsters * sizeof (r->monsters.name));
fscanf (in, "%s", rMonster);
r->monsters.name = malloc ((strlen (rMonster) + 1) * sizeof (char));
strcpy (r->monsters.name, rMonster);
}
return r;
}
希望我的代码是可读的,您可以从中了解我试图对我的区域结构中的 monster** monsters 指针做什么。任何关于如何在结构中访问和使用双结构指针的解释都会有所帮助。
【问题讨论】:
-
⟼通过采用indentation style 并一致地应用它,这段代码可以受益匪浅。缩进传达了结构和意图,使我们更容易理解您的代码,而无需花费大量时间来破译它,而且它还可以使错误更加明显,因为它们在视觉上很突出。
-
这段代码提出了很多问题,但首先:为什么
monster **monsters?你需要一个二维数组吗?为什么region** temp?你在这里使用双指针的方式对我来说没有任何意义。事实上,这里的指针太多了。为什么int *regionCount是一个指针?我的建议:停止使用这么多无意义的指针。 -
这些结构被分配给我们使用,所以你不能以任何方式编辑它们的形状或形式。我们需要读入指定给某个区域的怪物名称并将它们保存到该区域名称。
-
哦,如果这是由一位老师教授的学术代码,他对 C 的含义有自己的奇怪解释,那说明了很多。这些结构不是 C 通常是如何完成的,也不是它*应该*如何完成的。希望你能在这门课程中幸免于难。
-
是的,注册晚了,得到了 5 分教授。祝我好运