我可以使用没有指针的fread读取动态长度变量吗?

Elp*_*rto 1 c c++ pointers memory-management fread

我正在使用cstdio (stdio.h)从二进制文件读取和写入数据.由于遗留代码,我必须使用此库,它必须与Windows和Linux跨平台兼容.我有一个FILE* basefile_,我用的变量来读取configLabelLengthconfigLabel,在那里configLabelLength告诉我多少内存来分配的configLabel.

unsigned int configLabelLength; // 4 bytes
char* configLabel = 0;          // Variable length

fread((char *) &configLabelLength, 1, sizeof configLabelLength, baseFile_);
configLabel = new char[configLabelLength];
fread(configLabel,1, configLabelLength,baseFile_);

delete [] configLabel; // Free memory allocated for char array
configLabel = 0; // Be sure the deallocated memory isn't used
Run Code Online (Sandbox Code Playgroud)

有没有办法在configLabel不使用指针的情况下读入?例如,有一个解决方案,我可以使用c ++矢量库或我不必担心指针内存管理的东西.

GMa*_*ckG 5

做就是了:

unsigned int configLabelLength; // 4 bytes*
fread((char *) &configLabelLength, 1, sizeof configLabelLength, baseFile_);

std::vector<char> configLabel(configLabelLength);
fread(&configLabel[0], 1, configLabel.size(), baseFile_);
Run Code Online (Sandbox Code Playgroud)

向量中的元素是连续的.


*我假设您知道unsigned int不必总是4个字节.如果你注意你的实现细节很好,但是如果你采用Boost cstdint.hpp并且只是使用它会更容易一些uint32_t.