2013-10-17 163 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

當然,我只是使用他的代碼中的數字。我會回答:) –