使用以下代码时遇到问题:
unsigned char ciphertext[(int)(strlen ((char *)plaintext) * 1.5)];
当代码在执行时遇到此行时,如果大小为3687192
,则会失败。
但是,它成功获得以下值:
18
54
60
90
173196
224100
那么,我该如何克服这个问题?
Sidenote,声明必须保持格式unsigned char VARNAME
,因为我必须在OPENSSL加密/解密例程中使用它,这需要unsigned char
变量。
提前致谢。
答案 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];