如何确定复合文字数组中有多少个元素。我正在使用众所周知的宏 sizeof(a)/sizeof(a[0]);
但一直得到 1
。
#include <stdio.h>
typedef struct {
int enable;
const char * const *message;
} table_s;
static const table_s table[] =
{
{ 1, (const char * const []){ "Message 1", "Message 2" } },
{ 1, (const char * const []){ "Message 1", "Message 2", "Message 3"} }
};
#define NELEMS(x) (sizeof(x) / sizeof(x[0]))
int main(int argc, char *argv[]) {
printf("%d\n", NELEMS(table[0].message));
printf("%d\n", NELEMS(table[1].message));
return 0;
}
最佳答案
sizeof(a)/sizeof(*a)
仅在 a
是编译时动态大小块并按此类型输入时才有效。
char * messages[] = { "Message 1", "Message 2", "Message 3"};
sizeof(messages)/sizeof(*messages) = sizeof((char *)[3]) / sizeof(char*) = 3
但在您的情况下,您正在对指针类型进行操作
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
关于c - 如何确定 C 中复合文字数组中有多少个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279341/