2013-10-17 172 views
4

我想创建一个数组结构(数组)并且有点不确定所需的malloc。首先,我定义我的结构,C malloc数组的字符串结构

typedef struct { 

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

} player; 

然后在主我需要初始化结构,()和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

是啊,你就需要循环,一旦你'malloc'数组,到'malloc'的字符串。 –

回答

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(); 
+0

对于好的风格:如何用一个常量代替'100'? – Zane

+0

当然,我只是使用他的代码中的数字。我会回答:) –