如何计算char数组中的元素数?

时间:2013-04-17 14:01:13

标签: c++ windows string char sizeof

我试图计算数组中元素的数量,并被告知该行

int r = sizeof(array) / sizeof(array[0]) 

会给我数组中的元素数量。我发现该方法确实有效,至少对于int数组。然而,当我尝试这段代码时,事情就会破裂。

#include <iostream>
#include <Windows.h>
using namespace std;

int main() {
    char binaryPath[MAX_PATH];
    GetModuleFileName(NULL, binaryPath, MAX_PATH);
    cout << "binaryPath: " << binaryPath << endl;
    cout << "sizeof(binaryPath): " << sizeof(binaryPath) << endl;
    cout << "sizeof(binaryPath[0]: " << sizeof(binaryPath[0]) << endl;

    return 0;
}

当这个程序运行时,binaryPath的值是

C:\Users\Anish\workspace\CppSync\Debug\CppSync.exe

似乎有一个sizeof返回的大小(以字节为单位?id?idk,有人可以解释一下吗?)260.该行

sizeof(binaryPath[0]);

给出值1。

显然然后将260除以1会得到260的结果,这不是数组中元素的数量(据我所知,它是42左右)。有人可以解释我做错了吗?

我有一个潜行的怀疑,实际上并不是我想到的阵列(我来自Java和python),但我不确定所以我问你们。

谢谢!

4 个答案:

答案 0 :(得分:7)

260是MAX_PATH,你得到的是因为sizeof返回整个数组的大小 - 而不仅仅是数组中字符串的大小。

要获得您正在寻找的行为,请改为使用strlen

cout << "binaryPath: " << binaryPath << endl;
cout << "strlen(binaryPath): " << strlen(binaryPath) << endl;

答案 1 :(得分:5)

如果要查找字符串的大小,则需要使用strlen,如果使用sizeof,它将告诉您分配的数量不是空终止字符串的大小:

std::cout << "strlen(binaryPath: " << strlen(binaryPath) << std::endl;

您需要在顶部添加#include <cstring>

答案 2 :(得分:3)

您将数组的大小与其包含的字符串的长度混淆。无论数组包含多长时间,sizeof(arrayVar)都会为您提供整个数组大小。您需要使用strlen()来确定它包含的字符串的实际长度。

答案 3 :(得分:3)

回想一下,C ++和C中的char数组用于存储原始字符串,并且这些字符串的结尾用空字符标记。

运算符sizeof 非动态:它会为您提供整个数组的大小,或者您提供的字节数(或char,因为它们具有相同的大小),如代码中所定义。因此 260 肯定是MAX_PATH的值,用于定义char数组binaryPath

根据上述惯例,在调用GetModuleFilename之后存储在该数组中的字符串将被终止。为了获得它的长度,你需要计算它中的字符,直到你到达null char或使用C库提供的strlen函数。

一些指示: