在堆栈 C++ 上声明固定大小的字符数组
declare fixed size character array on stack c++
我正在尝试在堆栈上创建一个固定大小的字符数组(它确实需要堆栈分配)。 我遇到的问题是我无法让堆栈为数组分配超过 8 个字节:
#include <iostream>
using namespace std;
int main(){
char* str = new char[50];
cout << sizeof(str) << endl;
return 0;
}
指纹
8
如何在堆栈上分配一个固定大小的数组(在本例中为 50 字节,但它可以是任何数字)?
char* str = new char[50];
cout << sizeof(str) << endl;
它打印指针的大小,该大小在您的平台上8
。它与这些相同:
cout << sizeof(void*) << endl;
cout << sizeof(char*) << endl;
cout << sizeof(int*) << endl;
cout << sizeof(Xyz*) << endl; //struct Xyz{};
所有这些都会在您的平台上打印8
。
您需要的是以下之一:
//if you need fixed size char-array; size is known at compile-time.
std::array<char, 50> arr;
//if you need fixed or variable size char array; size is known at runtime.
std::vector<char> arr(N);
//if you need string
std::string s;
实际上,您正在分配 50 * sizeof(char)
或 50 个字节。 sizeof(str)
是指针大小的sizeof(char*)
。
要将 C 数组放在堆栈上,您必须编写
char myArray[50] = {0};
做到这一点C++方法是 - 正如纳瓦兹指出的那样
std::array<char, 50> arr;
但我不确定这个数组的内容是否会驻留在堆栈上。
这里的
str
引用的是大小为 50*sizeof(char)
的字符数组。但是sizeof(str)
打印的是str
变量的sizeof
,而不是它所引用的sizeof
。 str
这里只是一个指针变量,指针变量是一个无符号整数,其大小为 8
。
此外,您无法确定引用sizeof
(在本例中为字符数组的大小)。这是因为编译器不知道指针指向什么。
编辑:获取指针指向的内容的sizeof
在C/C++中没有多大意义。假设指针指向基元类型(如int
、long
),那么您可以直接执行sizeof(int)
。如果指针指向一个数组,就像在这种情况下,你可以直接做arraySize * sizeof(dataTypeOfArray)
。 无论如何arraySize
是已知的,因为 C/C++ 不允许定义未知大小的数组,并且无论如何dataTypeOfArray
都是已知的。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?