我在此页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());
}``
就是它的意思。 max
是运行时变量。您不能在C ++中将其用于数组范围。
我不知道为什么本教程的作者这样做,除了一些编译器接受它作为扩展,并且某些教程是不好的。
[考虑使用std::vector<char> sbuf(max)
代替,或者跳过动态分配并使用char sbuf[BLOCK_BYTES]
—我真的不明白为什么必须将缓冲区限制为max
。如果您没有完全填满它,也没关系。
标准C ++不允许创建大小基于变量的数组。
char sbuf[max];
max必须是在编译时已知的值。但是某些编译器可能允许这样做。因此,要解决您的问题,请使用支持动态数组大小的编译器,或者您需要在堆上分配数组:
char* sbuf = new char[max];
您将必须通过调用delete[] sbuf
或使用智能指针来手动删除数组。