C ++ unsigned char分配问题

时间:2016-11-21 21:24:59

标签: c++ memory char unsigned

使用以下代码时遇到问题:

unsigned char ciphertext[(int)(strlen ((char *)plaintext) * 1.5)];

当代码在执行时遇到此行时,如果大小为3687192,则会失败。

但是,它成功获得以下值:

18
54
60
90
173196
224100

那么,我该如何克服这个问题?

Sidenote,声明必须保持格式unsigned char VARNAME,因为我必须在OPENSSL加密/解密例程中使用它,这需要unsigned char变量。

提前致谢。

1 个答案:

答案 0 :(得分:1)

答案全在评论中,但我会明确说明。

通常在堆栈上分配局部变量。堆栈有限制,不允许增长无限大。一旦达到极限,你别无选择,只能在堆上分配变量。

你有很多选择如何做到这一点,但我会推荐两个。第一个是std::vector

std::vector<unsigned char> ciphertext(strlen ((char *)plaintext) * 3 / 2, 0);

要将此数组传递给另一个函数,请使用&ciphertext[0]

第二个是std::unique_ptr

std::unique_ptr<unsigned char> ciphertext = new unsigned char[strlen ((char *)plaintext) * 3 / 2];