我怎样才能得到这个的大小:
char* stringit[4] = {"H","H","UH","i"};
我试过了:
sizeof(stringit);
它输出了32。
我试图做一个for循环:
for (i= 0; check != 0; ++i){
check = stringit[i];
}
这也不起作用。有没有办法做到这一点而不必传递数组的大小?
我怎样才能得到这个的大小:
char* stringit[4] = {"H","H","UH","i"};
我试过了:
sizeof(stringit);
它输出了32。
我试图做一个for循环:
for (i= 0; check != 0; ++i){
check = stringit[i];
}
这也不起作用。有没有办法做到这一点而不必传递数组的大小?
使其成为 NULL 终止的指针数组
char* stringit[] = {"H","H","UH","i" , NULL };
然后只计算指针,直到找到一个空指针。
获取数组元素数量的正确方法是将其实际大小(以字节为单位)除以元素的大小:
sizeof(stringit) / sizeof(stringit[0])
但除非您有非常具体的要求,否则您应该使用标准容器,例如vector
(string
也不要使用char*
C 字符串):
std::vector<std::string> stringit = {"H","H","UH","i"};
std::cout << stringit.size();
正如@KonradRudolph 提到的,vector
如果您的元素数量是可变的,那就太好了。如果元素的数量在编译时已知并且永远不会改变,您可以使用array
:
std::array<std::string, 4> stringit = {"H","H","UH","i"};
std::cout << stringit.size();
只要您可以访问数组本身,即只要您没有将其转换为指针,元素的数量就可以计算为
sizeof stringit / sizeof *stringit
在您的情况下,它将评估为编译时常4
量。
这是否是您要查找的内容取决于您未在问题中提供的一些其他详细信息。您提到“必须传递数组的大小”。通过哪里?
char* stringit[4] = {"H","H","UH","i"};
是4个字符串的数组,即4个数组char*
(指针保存一个地址,64位地址=8字节)。这就是你得到 32 的原因。要检索元素的数量,你可以这样做:
int count = sizeof(stringit) / sizeof(stringit[0]);
这会给你 4。但请注意,这种方法不太灵活,我宁愿使用一些 STL 容器,即std::vector<char*>
或者甚至更好,也摆脱 C 风格的字符串并std::vector<std::string>
改用。
32是合适的尺寸。变量 stringit 是一个由 4 个 char 指针组成的数组,每个指针为 8 个字节。
你想做什么?
sizeof 适用于静态数组。它以字节为单位为您提供构造的大小。如果您想要长度,请执行sizeof(stringit) / sizeof(char*)
. 对于更灵活的解决方案,这可能是在 C++ 中做事的“正确方法”(适用于动态数组),如果您需要更多动态,只需使用 std::array 或 std::vector/std::list分配。
使用此构造,您可以简单地使用size()
成员。
请记住在必要时通过引用传递,以避免不必要的复制。