簡體   English   中英

從ifstream的C ++ read():沒有指針?

[英]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 returnXreturnY 沒有指向局部變量。 在上面的代碼,分配改變mainxmainy

使用局部變量的更簡單方法是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM