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

Mar*_*kas 0 c++ binary fstream file

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

}
Run Code Online (Sandbox Code Playgroud)

问题出在f1.write上.我可以写一个数组的二进制文件,但是当我尝试只编写一个int块时,它给了我一个错误:

Project.exe中0x522C7EA6(msvcp120d.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000002.

我不明白问题是什么.

Bat*_*eba 5

你需要转换to的地址,numchar*不是num自己.事实上,使用结果的行为(char*)num未定义的,这解释了崩溃.

f1.write((char *)&num, sizeof(num));改用.f1.read同样地改变.

我也改变了这个sizeof论点:我更喜欢这种风格,因为它可以防范类型变化.接下来,如果您在不同平台(例如Windows和Linux)上编写和阅读,则需要考虑字节序.