sizeof(a)/sizeof(*a)
will only work if a
is a compile time dynamic size block and is typed as such.
char * messages[] = { "Message 1", "Message 2", "Message 3"};
sizeof(messages)/sizeof(*messages) = sizeof((char *)[3]) / sizeof(char*) = 3
But in your case you are operating on a pointer type
NELEMS(table[0].message)
= sizeof(table[0].message) / sizeof(table[0].message[0])
= sizeof(const char * const *)/sizeof(const char * const)
= sizeof(void *) / sizeof(void *) = 1