2017-10-07 171 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

其實,如果你使用calloc(而不是malloc),你的情況下所有這些初始化都是爲你完成的。 – zzyzy