c++从文件流读入数据后会多一个全0数据的有关问题
c++从文件流读入数据后会多一个全0数据的问题
将一个vector<Record*>以binary形式存到文件后,再用输入流从文件输入到内存,再一条条加进vector时,vector最末位会多加进一个全0的Record数据,不知道是为什么。
代码片段如下:
存储方法:
void InfoVector::saveRecords(ostream &ofile)
{
//以binary方式进行存储
iter i_p;
for (i_p = firstRecord(); i_p != lastRecord(); i_p++) {
ofile.write((char *)*i_p, sizeof(Record));
}
}
读取方法:
int InfoVector::loadRecords(istream &is)
{
int result = 0;
while (!is.eof()) {
Record *rec = new Record;
is.read((char *)rec, sizeof(Record));
recVec.push_back(rec);
result = 1;
}
recVec.pop_back(); //不知为何vector里会多一个全0的记录,只能用pop暂时解决
return result;
}
本人暂时解决办法是读取后用个pop将全0数据出栈,但不明原因心里总有疙瘩。
------解决思路----------------------
最后一次read数据之后, 下一个字符就是EOF, 但是还没读到
这时 while (!is.eof())为真
再次read, 什么都没读到.
read好像有返回值把, 判断一下
---------------------------------------------------
以上为猜测.
将一个vector<Record*>以binary形式存到文件后,再用输入流从文件输入到内存,再一条条加进vector时,vector最末位会多加进一个全0的Record数据,不知道是为什么。
代码片段如下:
存储方法:
void InfoVector::saveRecords(ostream &ofile)
{
//以binary方式进行存储
iter i_p;
for (i_p = firstRecord(); i_p != lastRecord(); i_p++) {
ofile.write((char *)*i_p, sizeof(Record));
}
}
读取方法:
int InfoVector::loadRecords(istream &is)
{
int result = 0;
while (!is.eof()) {
Record *rec = new Record;
is.read((char *)rec, sizeof(Record));
recVec.push_back(rec);
result = 1;
}
recVec.pop_back(); //不知为何vector里会多一个全0的记录,只能用pop暂时解决
return result;
}
本人暂时解决办法是读取后用个pop将全0数据出栈,但不明原因心里总有疙瘩。
------解决思路----------------------
最后一次read数据之后, 下一个字符就是EOF, 但是还没读到
这时 while (!is.eof())为真
再次read, 什么都没读到.
read好像有返回值把, 判断一下
---------------------------------------------------
以上为猜测.