为什么read函数在sha1 c ++实现中不起作用? [重复]

问题描述 投票:-3回答:2

我在此页zedwood.com上找到了SHA1的c ++实现。为什么此功能不起作用。它说max必须是一个常数。如何解决这个问题?

void SHA1::read(std::istream &is, std::string &s, int max)
{
char sbuf[max];
is.read(sbuf, max);
s.assign(sbuf, is.gcount());
}``
c++ implementation sha1
2个回答
2
投票

就是它的意思。 max是运行时变量。您不能在C ++中将其用于数组范围。

我不知道为什么本教程的作者这样做,除了一些编译器接受它作为扩展,并且某些教程是不好的。

[考虑使用std::vector<char> sbuf(max)代替,或者跳过动态分配并使用char sbuf[BLOCK_BYTES] —我真的不明白为什么必须将缓冲区限制为max。如果您没有完全填满它,也没关系。


-1
投票

标准C ++不允许创建大小基于变量的数组。

char sbuf[max];

max必须是在编译时已知的值。但是某些编译器可能允许这样做。因此,要解决您的问题,请使用支持动态数组大小的编译器,或者您需要在堆上分配数组:

char* sbuf = new char[max];

您将必须通过调用delete[] sbuf或使用智能指针来手动删除数组。

© www.soinside.com 2019 - 2024. All rights reserved.