有没有办法确定以下查找表中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
};
答案 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++)