如何获得char * x []的大小

时间:2013-06-10 23:25:48

标签: c++

我如何得到这个的大小:

 char* stringit[4] = {"H","H","UH","i"};

我试过了:

sizeof(stringit);

并且它超过了32。

我试图制作一个for循环:

for (i= 0; check != 0; ++i){
    check = stringit[i];
}

这也不起作用。反正有没有传递数组的大小?

6 个答案:

答案 0 :(得分:7)

使其成为一个以NULL结尾的指针数组

 char* stringit[] = {"H","H","UH","i" , NULL };

然后只计算指针,直到找到空指针。

答案 1 :(得分:5)

获取数组元素数量的正确方法是将其实际大小(以字节为单位)除以元素的大小:

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();

答案 2 :(得分:3)

只要您可以访问数组本身,即只要您没有将其转换为指针,元素的数量就可以计算为

sizeof stringit / sizeof *stringit

将在您的情况下评估为编译时常量4

这是否是您要查找的内容取决于您在问题中未提供的一些其他详细信息。你提到“必须传递数组的大小”。将传递给

答案 3 :(得分:2)

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>

答案 4 :(得分:2)

32是正确的尺寸。变量stringit是一个包含4个char指针的数组,每个指针都是8个字节。

你想做什么?

答案 5 :(得分:0)

sizeof适用于静态数组。它以字节为单位给出构造的大小。 如果你想要长度,请sizeof(stringit) / sizeof(char*)。 对于一个更灵活的解决方案,可能是用C ++做的“正确方法”(适用于动态数组),只需使用std :: array或std :: vector / std :: list,如果你需要更多的动态分配

使用此构造,您只需使用size()成员。

请记住在必要时通过引用传递以避免不必要的复制。