gpt4 book ai didi

c - 段错误和引用结构数组

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

我有一个项目涉及创建文字游戏。我正在为每个玩家创建一个结构并将它们放在一个数组中。然后我尝试传入数据,然后通过指针将数组传递给其他函数,但是我不断遇到段错误(尽管在奇怪的情况下工作正常)。我总结如下。

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
char name[9];
int cardsHeld;
int hand[8];
} Player;

void printNames(Player** playerArray)
{
for (int i = 0; i < 3; i++)
{
fprintf(stdout, "%s\n", playerArray[i]->name);
}
}


void gamesetup()
{
int count;

fprintf(stdout, "How many players will be partaking in 'The Game'? ( 1 - 5)\n");
fscanf(stdin, "%d", &count);

Player** playerArray = (Player**)malloc(sizeof(Player*) * count);

for(int i = 0; i < count; i++)
{
playerArray[i] = (Player*) malloc(sizeof(Player));
fprintf(stdout, "Please enter the name for player %d.\n\n", i + 1);
fscanf(stdin, "%s", playerArray[i]->name);
}

printNames(playerArray);
}

int main(int argc, char** argv)
{
gamesetup();

return 0;
}

我的问题是;

  1. fscanf 是否正在获取 Player.name 成员的地址?我感到困惑的是 -> 运算符是否应该尊重结构成员的值,或者因为它在数组中的地址?

  2. 我不确定为什么它有时有效,但有时却无效。如果它有时从根本上起作用,那应该没问题。是 malloc 函数分配了不应该的内存,还是 fscanf 将数据放在了错误的位置。

谢谢。

-编辑-

更改了代码,使其成为一个完整的程序,似乎可以正常工作而没有段错误。我认为我的问题是由于在终止之前没有释放内存而引起的,下次我在没有先编译的情况下运行它时会把它搞砸。我仍然不确定为什么 fscanf 在我看来参数 playerArray[i]->name 返回的是值,而不是地址。

最佳答案

我已经解决了我感到困惑的地方。感谢您在评论中提供的所有帮助。

我在数组中访问的成员是一串字符,因此第一个成员是一个指针。通过使用 fscanf(stdin, "%s",playerArray[i]->name);这推迟了指针(一个地址),所以它可以工作。我陷入了困惑,因为它是结构数组的成员。段错误是由于我弄乱了代码以尝试修复已经有效的代码造成的。

关于c - 段错误和引用结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47497507/

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