我正在尝试创建一个结构数组(数组),并且我对所需的malloc有点不确定。首先我定义我的结构
typedef struct {
char *str1, *str2, *str3, *str4;
} player;
然后在main中我需要初始化结构,并将malloc内部的字符串,
player1 player;
player1.str1 = malloc(100);
// and the rest
但这仅适用于一种结构。我如何malloc这些结构的数组?我是否需要一个for循环并创建结构的N个实例?
我猜测有一条类似
的线playerArray* = malloc(N * sizeof(player))
最终目标是让我可以使用的东西,比如说,
printf("%s\n", playerArray[i].str1)
在我读完之后。感谢。
答案 0 :(得分: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();