赞
踩
我正在使用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块时,它给了我一个错误:
Project.exe中0x522C7EA6(msvcp120d.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000002.
我不明白问题是什么.
你需要转换to的地址,num
而char*
不是num
自己.事实上,使用结果的行为(char*)num
是未定义的,这解释了崩溃.
请f1.write((char *)&num, sizeof(num));
改用.f1.read
同样地改变.
我也改变了这个sizeof
论点:我更喜欢这种风格,因为它可以防范类型变化.接下来,如果您在不同平台(例如Windows和Linux)上编写和阅读,则需要考虑字节序.
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。