[英]C++ read() from ifstream: without pointers?
假設我有一個結構和一個帶有這些結構的二進制表示形式的文件,我將制作一個函數/方法,使用ifstream::read()
訪問此二進制數據。
這是一個示例結構:
struct MyStruct {
int x; //Value interested in
int y; //Value interested in
int anotherInteger; //Not interested
double aDouble; //Not interested
}
我該如何制作函數(我在這里將其稱為readData):讀取時不使用指針,或者,如果有必要使用指針,我應該在哪里放置適當的刪除?
到目前為止,我的readData的相關部分如下所示:
void readData(int position, int &returnX, int &returnY) {
ifstream inFile("binaryFile.dat",ios::binary);
MyStruct *st = new MyStruct[1];
inFile.seekg(sizeof(MyStruct)*pos);
inFile.read((char*) st, sizeof(MyStruct));
returnX = st[0].x;
returnY = st[0].y;
//delete [] st goes here?
}
我嘗試取消刪除部分的注釋,但出現分配錯誤,可能是因為x和y的值指向的東西不再存在。
關於如何解決這個問題的任何想法?
為什么不使用局部變量?
void readData(int position, int &returnX, int &returnY) {
ifstream inFile("binaryFile.dat",ios::binary);
inFile.seekg(sizeof(MyStruct)*position);
MyStruct st;
inFile.read((char*) &st, sizeof(MyStruct));
returnX = st.x;
returnY = st.y;
}
int main() {
int mainx, mainy;
readData(0, mainx, mainy);
return 0;
}
同樣,引用不能重新建立。 因此,賦值將值分配給調用函數傳遞的原始 int
。 returnX
和returnY
沒有指向局部變量。 在上面的代碼,分配改變mainx
和mainy
。
使用局部變量的更簡單方法是:
void readData(int position, int &returnX, int &returnY) {
ifstream inFile("binaryFile.dat",ios::binary);
MyStruct st;
inFile.seekg(sizeof(MyStruct)*position);
inFile.read((char*)&st, sizeof(MyStruct));
returnX = st.x;
returnY = st.y;
}
delete[]
很好。 如果出現錯誤,這不是因為x和y的值指向不再存在的東西,因為它們的值只是整數並且不指向任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.