读取二进制文件中的字符串 C++
Reading string in binary files C++
我在用 C++ 写入和读取二进制文件时遇到了麻烦。
我从堆栈问题中学到了很多东西,但我从来没有让它工作过,我猜问题出在阅读过程中,
读取和保存方法如下:
void date::save(ofstream& fo){
fo.write((char *) &jour, sizeof(int));
fo.write((char *)&moi, sizeof(int));
fo.write((char *)&annee, sizeof(int));
size_t len = heure.size();
fo.write((char *)&len,sizeof(size_t));
fo.write(heure.c_str(), heure.size());
}
void date::load(ifstream& fi){
fi.read((char *)&jour, sizeof(int));
fi.read((char *)&moi, sizeof(int));
fi.read((char *)&annee, sizeof(int));
size_t len;
fi.read((char *)&len, sizeof(size_t));
char* temp = new char[len+1];
fi.read(temp, len);
temp[len] = '[=10=]';
heure = temp;
delete [] temp;
}
另外:是否可以使用 ofstream.write() 功能直接保存具有动态属性的 类?
非常感谢。
赋值时,乍一看读写似乎是正确的
heure = temp;
有问题。
你分配 len+1 字节的内存。 temp 指向该内存的开头。
在您分配 (heure = temp) 之后,heure 也指向相同的内存。然后你调用 delete,从那时起,任何其他操作都可以将任何数据写入该内存(称为 'wild pointer')。
你必须使用
strcpy(heure, temp);
将每个字节从temp复制到heure分配的内存中。当然要确保 heure 已经分配了足够的 space 来容纳 temp.
的所有字节
我在用 C++ 写入和读取二进制文件时遇到了麻烦。 我从堆栈问题中学到了很多东西,但我从来没有让它工作过,我猜问题出在阅读过程中,
读取和保存方法如下:
void date::save(ofstream& fo){
fo.write((char *) &jour, sizeof(int));
fo.write((char *)&moi, sizeof(int));
fo.write((char *)&annee, sizeof(int));
size_t len = heure.size();
fo.write((char *)&len,sizeof(size_t));
fo.write(heure.c_str(), heure.size());
}
void date::load(ifstream& fi){
fi.read((char *)&jour, sizeof(int));
fi.read((char *)&moi, sizeof(int));
fi.read((char *)&annee, sizeof(int));
size_t len;
fi.read((char *)&len, sizeof(size_t));
char* temp = new char[len+1];
fi.read(temp, len);
temp[len] = '[=10=]';
heure = temp;
delete [] temp;
}
另外:是否可以使用 ofstream.write() 功能直接保存具有动态属性的 类?
非常感谢。
赋值时,乍一看读写似乎是正确的
heure = temp;
有问题。 你分配 len+1 字节的内存。 temp 指向该内存的开头。 在您分配 (heure = temp) 之后,heure 也指向相同的内存。然后你调用 delete,从那时起,任何其他操作都可以将任何数据写入该内存(称为 'wild pointer')。
你必须使用
strcpy(heure, temp);
将每个字节从temp复制到heure分配的内存中。当然要确保 heure 已经分配了足够的 space 来容纳 temp.
的所有字节