我怎样才能计算一个字符数组中的元素的数量?

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

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

会给我数组中的元素的数量。 我发现这个方法可以工作,至less对于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(以字节?bits?idk返回的大小,有人可以解释这一点?)为260.线

 sizeof(binaryPath[0]); 

给出1的值。

很明显,将260除以260得到的结果不是数组中元素的数量(我的数字是42左右)。 有人能解释我做错了什么吗?

我有一个偷偷摸摸的怀疑,实际上并不是一个数组(我来自Java和Python),但我不确定,所以我问你们。

谢谢!

如果你正在寻找字符串的大小,那么你需要使用strlen ,如果你使用sizeof它会告诉你分配的数量不是空字符串的大小:

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

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

260是MAX_PATH ,因为sizeof返回整个数组的大小 – 而不仅仅是数组内的字符串的大小。

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

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

你正在混淆数组的大小和它所包含的字符串的长度。 sizeof(arrayVar)给你整个数组的大小,不管它包含的字符串有多长。 你需要使用strlen()来确定它包含的字符串的实际长度。

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

运算符sizeof 不是动态的 :它会给你整个数组的大小,或者你提供的任何类型的字节 (或字符,因为它们有相同的大小),如你的代码中定义的那样。 因此, 260肯定是MAX_PATH的值,用于定义char数组binaryPath

按照上述惯例,调用GetmoduleeFilename后存储在该数组中的字符串将被终止。 为了得到它的长度,你需要对它中的字符进行计数,直到到达空字符或使用C库提供的strlen函数。

有些指点:

  • sizeof是做什么的?
  • strlen的