Zoh*_*ule 1 c++ fstream turbo-c++
当我尝试将一个对象与任何具有13或26或7值的元素存储在一起,然后尝试读取此文件时,它只是给出了垃圾值。其他值(例如1、64、78(随机值))则不会发生这种情况。
我分别使用了ofstream和ifstream来保持代码简单。我正在使用旧的编译器(Borland C ++),但是我的朋友们没有遇到此错误。
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
class xyz
{
public:
int x;
};
void main()
{
xyz a;
a.x = 45; // replace by 45 or 78 it works. Replace by 13, 26 it shows garbage values.
ofstream of;
of.open("file.dat", ios::out||ios::binary);
of.write((char*)&a, sizeof(a));
of.close();
xyz b;
ifstream sf;
sf.open("file.dat", ios::in||ios::binary);
sf.read((char*)&b, sizeof(b));
sf.close();
cout<<b.x;
getch();
}
Run Code Online (Sandbox Code Playgroud)
当前输出将是45,但是如果将其替换为13或26,它将返回垃圾值。
sf.open("file.dat", ios::in||ios::binary);
Run Code Online (Sandbox Code Playgroud)
||
不按照您的想法去做。在这里,您需要使用按位或运算符|
,而不是||
逻辑运算符。
结果,由于这个错误,文件实际上是以文本模式而不是您期望的二进制模式打开的。
您的代码将二进制八位位组13和26写入文件并读回。八位位组13和26在Microsoft Windows上的文本文件中具有特殊含义,这是由于其历史悠久的缘故。您的代码也无法检查来自read()
输入流的返回值和/或输入流的状态,这将使您能够检测到此错误。
归档时间: |
|
查看次数: |
68 次 |
最近记录: |