是的,您需要循环并为结构的每个实例分配字符串.我建议你创建一个看起来像这样的函数:
#define PLAYER_STR_LENGTH 100
typedef struct {
char* str1, str2, str3;
// ...
} player;
player* create_player() {
player* p = malloc(sizeof(player));
if (p == NULL) {
// out of memory, exit
}
p->str1 = malloc(PLAYER_STR_LENGTH);
if (p->str1 == NULL) {
// out of memory, exit
}
// allocate more stuff...
return p;
}
最后制作一个匹配函数free_player来清理它也是一个好主意.如果要在分配时设置值,也可以将参数传递给create_player()函数.
要创建一个玩家数组,只需创建一个玩家指针数组,然后循环它并分配每个玩家结构,如下所示:
player** players = malloc(N * sizeof(player*));
for(int n = 0; n < N; n++)
players[n] = create_player();