繁体   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