我正在尝试获取由标准输入填充的数组的大小:
char *myArray;
cin >> myArray
cout << sizeof(myArray);
当我输入长度大于 4 的字符串时返回 4,例如“40905898”
我哪里错了?
最佳答案
sizeof
运算符静态评估您传递给它的东西的大小。 char*
是一个指针,根据机器体系结构具有特定大小(32 位系统上为 4 字节,64 位机器上为 8 字节)。要完成您正在尝试做的事情,我建议您使用 string
您可以通过添加 #include <string>
使用的类型连同 using namespace std;
到您的源文件。
string line;
cin >> line;
cout << line.length() << endl;
它不易出错且更易于使用。
顺便说一句,你尝试做的事情真的很危险。事实上,当你使用 cin >> myArray
, 你应该已经为 myArray
分配了一些内存你还没有做过。这将导致内存损坏,这可能会使您的程序崩溃并可能使其遭受缓冲区溢出攻击。
C++ 中的简单数组不知道其大小。您可以使用 sizeof
仅当数组是静态分配的 并且您正在使用 sizeof
在数组本身上,而不是指向它的另一个指针,例如,这不会像您预期的那样工作:
int x[5];
int *a = &x[0];
// a[i] is now the same as x[i] but:
cout << sizeof(x) << endl; // prints 20, assuming int is 32 bits long
cout << sizeof(a) << endl; // prints 4, assuming a pointer is 32 bits long
请注意,数组的总大小打印在第一行,而不是元素数。您可以使用 sizeof(x)/sizeof(*x)
找出静态数组中的元素数。这对于使用 new
的动态分配数组是不可能的.事实上,C++ 数组非常容易出错,使用它们时应格外小心,最好使用 vector
。和 string
在大多数情况下。
关于带有标准输入的 C++ 字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377695/