4

(配列の) 構造体の配列を作成しようとしていますが、必要な malloc が少しわかりません。まず、構造体を定義します。

typedef struct {

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

 } player;

次に、主に構造を初​​期化し、その中の文字列を malloc する必要があります。

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

ただし、これは 1 つの構造のみです。これらの構造体の配列を malloc するにはどうすればよいですか? 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 に答える