1

我正在使用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

configLabel没有不使用指针的读取方法?例如,是否有一个解决方案,我可以使用 c++ 向量库或我不必担心指针内存管理的东西。

4

1 回答 1

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_);

向量中的元素是连续的。


*我假设您知道unsigned int不一定总是 4 个字节。如果您注意您的实现细节,那很好,但如果您采用 Boostcstdint.hpp并只使用uint32_t.

于 2010-07-15T19:20:56.450 回答