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

use*_*858 2 c++

我怎么能得到这个的大小:

 char* stringit[4] = {"H","H","UH","i"};
Run Code Online (Sandbox Code Playgroud)

我试过了:

sizeof(stringit);
Run Code Online (Sandbox Code Playgroud)

它输出了32.

我试着做一个for循环:

for (i= 0; check != 0; ++i){
    check = stringit[i];
}
Run Code Online (Sandbox Code Playgroud)

那也不起作用.无论如何要做到这一点,而不必传递数组的大小?

小智 7

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

 char* stringit[] = {"H","H","UH","i" , NULL };
Run Code Online (Sandbox Code Playgroud)

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

  • 将5个元素放入一个包含4个元素的数组中可能不是一个好主意. (5认同)

sya*_*yam 5

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

sizeof(stringit) / sizeof(stringit[0])
Run Code Online (Sandbox Code Playgroud)

但除非你有非常具体的要求,否则你应该使用一个标准的容器vector(而string不是char*C字符串):

std::vector<std::string> stringit = {"H","H","UH","i"};
std::cout << stringit.size();
Run Code Online (Sandbox Code Playgroud)

正如@KonradRudolph所提到的,vector如果您的元素数量是可变的,那就太好了.如果元素的数量在编译时是已知的并且永远不会改变,则可以使用array:

std::array<std::string, 4> stringit = {"H","H","UH","i"};
std::cout << stringit.size();
Run Code Online (Sandbox Code Playgroud)