以char **的形式查找字符串数组的长度?

时间:2016-02-02 22:09:52

标签: c arrays string pointers char

我知道如何找到以这种方式初始化的字符串数组的长度

char* arr[] = {"some", "thing"};

就这样做,

size_t length = sizeof(arr)/sizeof(char*);

你的长度为2,是吗?但是我假设char **与上面的char *数组是一样的,并且整个sizeof的东西不能用它(我至少知道它是一个指向指针的指针)。我已经到处寻找一种方法来寻找一种方法来将数组的长度存储为char **而不是char * [],但我觉得我对如何做到这一点我不够了解,甚至虽然它看起来应该非常简单。

在我的程序中,我已经有了一个char **数组,其值为索引0 ... n,当我尝试使用上面的方式获取长度时,length总是为1.

任何帮助?

1 个答案:

答案 0 :(得分:0)

有一种方法可以做到:

char* arr[] = {NULL, NULL, NULL}; 
printf("%d\n", sizeof(arr)/sizeof(*arr));

打印出3。但是,这种方法存在一个问题,您可能不会注意到它 - 只有在arr大小称为编译时才会起作用 - 这意味着,方括号中提供了确切的大小(并且您应该然后使用常量而不是sizeof,或者像我们的两个示例中一样提供初始化列表(我认为它是sizeof与数组的唯一合法情况)。如果您以任何其他方式定义数组,例如下面的arr2

char** arr2 = arr;

它不会起作用,会像你说的那样找到1