声明堆栈Ç固定大小字符数组++(declare fixed size character array

2019-09-21 04:28发布

我试图在栈上创建一个固定大小的字符数组(它确实需要堆栈中分配)。 我有问题是我不能得到的堆栈分配8个字节以上的数组:

#include <iostream>
using namespace std;

int main(){
        char* str = new char[50];
        cout << sizeof(str) << endl;

        return 0;
}

版画

8

如何分配一个固定大小阵列(在此情况下50个字节。但是它可以是任意数量)在堆栈上?

Answer 1:

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;


Answer 2:

其实,你分配50 * sizeof(char) ,或50个字节。 sizeof(str)sizeof(char*)这是一个指针的大小。



Answer 3:

为了把堆栈上的C数组,你必须写

char myArray[50] = {0};

C ++的方式做这将是 - 正如纳瓦兹指出

std::array<char, 50> arr;

但我不知道这是否数组的内容将驻留在堆栈中。



Answer 4:

str这里所引用到的大小的字符数组50*sizeof(char) 。 但是sizeof(str)正在打印sizeofstr变量,而不是sizeof它是什么引用。 str这里仅仅是一个指针变量和指针变量是一个无符号整数,其大小为8

还不能确定sizeof基准(在这种情况下,字符数组的大小)。 这是因为编译器不知道什么指针指向。

编辑 :获取sizeof什么指针指向不使C / C多大意义++的。 假设一个指针指向一个基本类型(如intlong ),那么你可以直接做sizeof(int) 。 而如果指针指向一个数组,像在这种情况下,你可以直接做arraySize * sizeof(dataTypeOfArray) arraySize因为C被反正已知/ C ++不允许定义未知大小的阵列,以及dataTypeOfArray被反正已知的。



文章来源: declare fixed size character array on stack c++