1

我在另一个文件的函数中修改我在 main 中创建的结构的值时遇到了一些问题:

这是我的 .h 文件中的结构定义:

typedef struct Player Player;
struct Player
{
 char pseudo[30];
 char pawnOfPlayer;
 int numberPawn;
};

这是 Player 的表声明和我在 main 中调用的函数:

Player player[2];
whoPlays = initPlayerAttribution(&player[2], gamingMode);

这是另一个 C 文件中出现我的崩溃的函数定义的一部分:

int initPlayerAttribution(Player *tab1D[], int gamingMode)
{
    if(gamingMode == PLAYER_VS_AI)
    {
        strcpy(&(*tab1D[1]).pseudo, "AI");
        printf("Type the player1 name :\t");
        scanf("%s", (*tab1D[0]).pseudo);
    }
    else
    {
        printf("Type the player1 name :\t");
        scanf("%s", (*tab1D[0]).pseudo);
        printf("Type the player2 name :\t");
        scanf("%s", (*tab1D[1]).pseudo);
    }
    return 0;
}

当你有一个包含结构的表并且你必须将它发送到一个函数时,我仍然很难理解指针:x

非常感谢 !

4

2 回答 2

2

您正在给出数组末尾的位置,请尝试仅输入:

whoPlays = initPlayerAttribution(player, gamingMode);

并将您的功能更改为:

int initPlayerAttribution(Player *tab1D, int gamingMode)
{
    ...
}

由于您将指针传递给您的数组,它会很好。它与普通整数不同。

如果你这样做会发生什么:

whoPlays = initPlayerAttribution(&player[2], gamingMode);

正在为 initPlayerAttribution 提供一个数组,该数组指向数组之后的某个内存地址。所以你实际上试图在 initPlayerAttribution 中访问的是 player[2] 和 player[3]。

于 2013-11-08T10:34:22.160 回答
1
Player player[2];
whoPlays = initPlayerAttribution(&player[2], gamingMode);

您超出范围,数组以 0 为底 ----^

您的函数需要一个指针:

int initPlayerAttribution(Player *tab1D, int gamingMode)

或者

int initPlayerAttribution(Player tab1D[], int gamingMode)

但不是Player *tab1D[],那是一个指向玩家的指针数组

而且您不需要指定维度(数组衰减为函数中的指针),只需:

whoPlays = initPlayerAttribution(player, gamingMode);
于 2013-11-08T10:33:07.737 回答