c++ - 将整数写入二进制文件 C++ 的问题

标签 c++ file binary fstream

我正在使用 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。

我不明白这是什么问题。

最佳答案

您需要将numaddress 转换为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/

相关文章:

c - C 语言维吉尼亚密码

javascript - 如何使用 Node js api 将 JavaScript 文件对象上传到 Cloudinary?

c++ - 将 3 个字节/引脚值合并为一个字节

visual-studio - 如何将数字签名应用于 Visual Studio 项目?

c++ - 如何实现 stack::top() 函数?

c++ - 如何在不触摸注册表的情况下在 Windows 启动时运行应用程序?

java - 从文件中读取不同类型的数据

java - 特定整数在运行时需要多少字节?

c++ - C++ 中的嵌套子类

c++ - 比较运算符重载