我知道如何找到以这种方式初始化的字符串数组的长度
char* arr[] = {"some", "thing"};
就这样做,
size_t length = sizeof(arr)/sizeof(char*);
你的长度为2,是吗?但是我假设char **与上面的char *数组是一样的,并且整个sizeof的东西不能用它(我至少知道它是一个指向指针的指针)。我已经到处寻找一种方法来寻找一种方法来将数组的长度存储为char **而不是char * [],但我觉得我对如何做到这一点我不够了解,甚至虽然它看起来应该非常简单。
在我的程序中,我已经有了一个char **数组,其值为索引0 ... n,当我尝试使用上面的方式获取长度时,length总是为1.
任何帮助?
答案 0 :(得分:0)
有一种方法可以做到:
char* arr[] = {NULL, NULL, NULL};
printf("%d\n", sizeof(arr)/sizeof(*arr));
打印出3
。但是,这种方法存在一个问题,您可能不会注意到它 - 只有在arr
大小称为编译时才会起作用 - 这意味着,方括号中提供了确切的大小(并且您应该然后使用常量而不是sizeof
,或者像我们的两个示例中一样提供初始化列表(我认为它是sizeof
与数组的唯一合法情况)。如果您以任何其他方式定义数组,例如下面的arr2
:
char** arr2 = arr;
它不会起作用,会像你说的那样找到1
。