4

我正在尝试创建一个结构数组(数组),并且有点不确定所需的 malloc。首先我定义我的结构,

typedef struct {

     char *str1, *str2, *str3, *str4;

 } player;

然后在 main 我需要初始化结构,并 malloc 里面的字符串,

player1 player; 
player1.str1 = malloc(100);
// and the rest

但这仅适用于一种结构。如何分配这些结构的数组?我是否需要有一个 for 循环并创建结构的 N 个实例?

我猜有一条线是这样的

playerArray* = malloc(N * sizeof(player)) 

最终目标是拥有一些我可以访问的东西,比如,

printf("%s\n", playerArray[i].str1)

在我把东西读进去之后。谢谢。

4

1 回答 1

6

是的,您需要为结构的每个实例循环和分配字符串。我建议你创建一个看起来像这样的函数:

#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();
于 2013-10-17T10:11:35.083 回答