我正在使用 fstream 将整数写入二进制文件。
int main(){
fstream f1;
int num = 2, num2 = 0;
f1.open("dat1", ios::app | ios::out | ios::in | ios::binary);
f1.write((char *)num, sizeof(int));
f1.seekp(0);
f1.read((char *)num2, sizeof(int));
cout << num2;
}
问题出在 f1.write 行。我可以向二进制文件写入一个数组,但是当我尝试只写入一个 int block 时,它会给我一个错误:
Project.exe 中 0x522C7EA6 (msvcp120d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000002。
我不明白这是什么问题。
最佳答案
您需要将num
的address 转换为char*
,而不是num
本身。事实上,使用 (char*)num
结果的行为是 undefined 这解释了崩溃。
改用 f1.write((char *)&num, sizeof(num));
。类似地更改 f1.read
。
我还更改了 sizeof
参数:我更喜欢这种风格,因为它可以让您在未来避免类型更改。继续,如果您在不同的平台(例如 Windows 和 Linux)上写作和阅读,则需要考虑字节序。
关于c++ - 将整数写入二进制文件 C++ 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612069/