快速问题:如何知道char * foo []的长度?
感谢。
答案 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的不同部分,因此需要谨慎。