我在另一个文件的函数中修改了在我的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
非常感谢!
答案 0 :(得分:2)
您正在给出数组末尾的位置,请尝试输入:
whoPlays = initPlayerAttribution(player, gamingMode);
并将您的功能更改为:
int initPlayerAttribution(Player *tab1D, int gamingMode)
{
...
}
由于你将指针传递给你的数组,它会很好。它与正常的整数不同。
如果您这样做会发生什么:
whoPlays = initPlayerAttribution(&player[2], gamingMode);
为initPlayerAttribution提供一个数组,该数组指向数组后的某个内存地址。所以你实际上试图在initPlayerAttribution中访问的是播放器[2]和播放器[3]。
答案 1 :(得分: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);