2013-06-30 86 views
0

有沒有一種方法可以確定下列查找表中的message元素的數量,還是我需要在結構中明確指定int size找出查找表的大小C

typedef struct { 
    int enable; 
    char* message[3]; 
} lookuptable; 

lookuptable table[] = { 
    {1, {"Foo", "Bar", "Baz"}}, // # 3 
    {1, {"Foo", "Bar"}},  // # 2 
    {1, {"Foo"}},    // # 1 
    {1, {"Foo", "Baz"}},  // # 2 
}; 

回答

3

不,沒有辦法做到這一點。您將不得不在某處存儲元素的數量或用幻數或NULL終止數組。

+0

很高興知道。謝謝(你的)信息! –

1

消息數組中總是會有3個消息元素,因爲您已將其定義爲具有3的大小。您未初始化的數組中的那些元素將被初始化爲NULL,因此您可以循環與初始化(非空)的元素:

lookuptable *table_entry = ... 
for (int i = 0; i < 3 && table_entry->message[i]; i++) { 
    ...do something... 

這可能是更換恆3#define常數是一個好主意,所以只在一個地方存在。或者你可以使用sizeof(array)/sizeof(array[0])絕招:

for (int i = 0; i < sizoef(table_entry->message)/sizeof(table_entry->message[0]) && table_entry->message[i]; i++)