如何获得char **的长度?

时间:2010-04-08 16:09:38

标签: c arrays

快速问题:如何知道char * foo []的长度?

感谢。

3 个答案:

答案 0 :(得分:11)

你做不到。并非不知道指针内部的内容,或提前存储数据。

答案 1 :(得分:6)

你的意思是数组中的字符串数量?

如果阵列是在同一个块中的堆栈上分配的,则可以使用sizeof(foo)/sizeof(foo[0])技巧。

const char *foo[] = { "abc", "def" };
const size_t length = sizeof(foo)/sizeof(foo[0]);

如果您在谈论传递给main的argv,则可以查看argc参数。

如果数组是在堆上分配的,或是传递给函数(它会衰变成指针),那么除非分配它的人也将大小传递给你,否则你运气不好。

答案 2 :(得分:2)

如果数组是静态分配的,则可以使用sizeof()函数。所以sizeof(foo)/sizeof(char *)会起作用。 如果阵列是动态制作的,那你就麻烦了!通常会明确存储此类数组的长度。

编辑: janks当然是正确的,sizeof是一个运营商。

值得指出的是,C99允许sizeof在可变大小的数组上。然而,不同的编译器实现了C99的不同部分,因此需要谨慎。