带有标准输入的 C++ 字符数组

标签 c++ arrays string pointers sizeof

我正在尝试获取由标准输入填充的数组的大小:

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/

相关文章:

python - 类型错误 : cannot concatenate 'str' and 'int' objects

C字符串不断相互覆盖

c++ - 统计txt文件中的元素个数

c++ - 为了清楚起见,您是否应该将 .h 文件中已经包含的所有内容都包含在 .cpp 文件中?

java - 如何用数字自动填充二维数组

javascript - 按 utf-8 字节位置提取子字符串

具有模板类默认参数的 C++17 别名模板

java - 管理供 Java GUI 使用的 C++ API 的 Java 包装 : proper version control

javascript - if 子句中的赋值运算符赋值并执行检查?

javascript - React Reconciliation 是这样工作的吗?