我對C++比較陌生,我試圖讀取專有文件格式。我知道標題格式,並且創建了一個結構RTIHeader
以及必要的字段。C++可能的內存泄漏讀取文件
我的測試代碼從文件中讀取字節並將它們複製到與結構體相同的內存空間中,從而有效地重構它。我的問題是,每次運行測試代碼(只是調用構造函數),我都會得到不同的值!我的理論是,我不完全明白memcpy
。
struct RTIHeader decode(char* memblock){
struct RTIHeader header;
memcpy(&header,&memblock,sizeof(RTIHeader));
return header;
}
RTIFile::RTIFile(const char* filename){
// open the file in binary input mode with the pointer at the end
std::ifstream file(filename,
std::ios::in |
std::ios::binary |
std::ios::ate);
std::ifstream::pos_type size;
char * memblock;
RTIHeader header;
// if the file didn't open, throw an error
if(!file.is_open()){
//TODO learn about C++ error handling
return;
}
// use pointer position to determine file size
size = file.tellg();
// read file
memblock = new char [sizeof(RTIHeader)];
file.seekg(0,std::ios::beg);
file.read(memblock,sizeof(RTIHeader));
header = decode(memblock);
std::cout << (unsigned int)header.signature[0] << "\n";
// still need to read the rest of the file
file.close();
}
我們需要RTIHeader的定義。 –