我不能使用文件大小作为数组大小,因为它应该是一个常量。但是我把它设为常数。
ifstream getsize(dump, ios::ate);
const int fsize = getsize.tellg(); // gets file size in constant variable
getsize.close();
byte dumpArr[fsize] // not correct
array<byte, fsize> dumpArr // also not correct
byte *dumpArr = new byte[fsize]; // correct, but I can't use dynamic array
我需要用文件大小创建std::数组。
您需要一个编译时常量要声明数组,你有两个选择:
- 放弃创建数组的想法,使用
std::vector
代替:std::ifstream file("the_file"); std::vector<std::uint8_t> content(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>{});
- 如果您想要读取的文件在您编译完程序后不会更改,那么将该文件作为构建系统的一部分。makefile示例:
…并且在program: source.cpp filesize.h g++ -o program source.cpp filesize.h: the_file stat --printf '#pragma oncen#define FILESIZE %sULLn' the_file > header.h
source.cpp
中使用FILESIZE
来声明你的数组。