2013-06-30 54 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++)