找出C中查找表的大小

时间:2013-06-30 14:29:32

标签: c arrays struct

有没有办法确定以下查找表中message个元素的数量,还是需要在结构中明确拥有int size

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
};

2 个答案:

答案 0 :(得分:3)

没有办法做到这一点。您必须在某处存储元素数量或使用幻数或NULL终止数组。

答案 1 :(得分:1)

消息数组中总会有3个消息元素,因为您已将其定义为大小为3.您未初始化的数组元素将初始化为NULL,因此您可以循环遍历初始化(非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++)