[英]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.