2017-10-07 18 views
0

私は、次の構造体があります構造体を指すポインタの配列を初期化するにはどうすればよいですか?

struct clientDetails 
{ 
    int socket; 
    char* port; 
    char* IP; 
    char* hostName; 
    int msgSentCount; 
    int msgRecvCount; 
    char* status; 
    char bufferMsg[BUFFER_SIZE]; 
    char blockedUser[4]; 
    int blockedCount; 
}; 

をそして、私はポインタの配列を持っている:

struct clientDetails* allClients[4]; 

はどのようにして、デフォルト値を持つようにallClientsのすべての配列要素を初期化することができますか?

私は次のことを試してみましたが、私は「型構造体の不完全な定義は」取得しています:一つには

for(int i = 0; i<4; i++) { 
     allClients[i]->socket = 0; 
     allClients[i]->port = NULL; 
     allClients[i]->IP = NULL; 
     allClients[i]->hostName = NULL; 
     allCLients[i]->msgSentCount = 0; 
     allClients[i]->msgRecvCount = 0;  
     allClients[i]->status = NULL; 
     allClients[i]->bufferMsg = ""; 
     allClients[i]->blockedUser = {"","","",""}; 
     allClients[i]->blockedCount = 0;  
} 
+0

エラーの行は何ですか? [最小限の自己完結型の例](https://stackoverflow.com/help/mcve)を提供して、問題を再現できるようにします。 – Drop

+0

ポインタを何かを指すように初期化することができます。ところで、あなたはC++コンパイラを使用していますか? – wildplasser

+0

はい。私はgccを使用しています。 – Manic

答えて

2

を、あなたは今...その構造体にストレージを割り当てる必要がありますが、単一の持っているすべてのポインタ。右あなたのループの先頭で、あなたのような何かを行う必要があります。

allClients[i] = malloc(sizeof(clientDetails)); 

を私は「C」の構造体をやったが、あなたは/おそらく同様にあなたの構造体をtypedefなければならない可能性があるのでそれはしばらくしています。

+2

実際には、(mallocの代わりに)callocを使用すると、このような初期化がすべて自動的に行われます。 – zzyzy

関連する問題