読み取り関数には、ファイルへのnバイト(2番目の引数で言及)を格納するための配列へのポインターとしての最初の引数があります。
クエリは、
クラスxの2つのオブジェクトを作成した場合。
それから、
x stack[2];
2つのオブジェクトの内容を入力し、ファイル'xyz'を開いたと仮定します(fstreamを使用して、オブジェクトファイルを作成し、コマンドfile.open("xyz",ios::in|ios::out)
を使用して、書き込みを使用して2つのオブジェクトの内容をファイルに入力しました。
このコマンドを使用すると
file.read((char*) &stack[1],sizeof(stack[0]))
stack[1]
の内容がありますstack[0]
、
つまり、読み取り関数は最初の引数アドレスをと見なしますか、&stack[1]
それとも考慮します&stack[0]
か?
更新:スタックの内容を逆にするために使用されるコード
////オブジェクトの内容を逆にする
#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
class Inventory
{
char name[10];
int code;
int cost;
public:
void readdata();
void writedata();
};
void Inventory::readdata(void)
{
cin>>name;
cin>>code;
cin>>cost;
}
void Inventory::writedata(void)
{
cout<<setiosflags(ios::left)
<<setw(10)<<name
<<resetiosflags(ios::right)
<<setw(10)<<code
<<setprecision(2)
<<setw(10)<<cost
<<endl;
}
int main()
{
Inventory item[3];
fstream file;
file.open("Stock",ios::in|ios::out);
cout<<"Enter details for three items\n";
for(int i=0;i<3;i++)
{
item[i].readdata();
file.write((char*) &item[i],sizeof(item[i]));
}
file.seekg(0);
cout<<"\nOutput\n\n";
for(int i=0;i<3;i++)
{
file.read((char*) &item[2-i],sizeof(item[i]));
}
for(int i=0;i<3;i++)item[i].writedata();
file.close();
return 0;
}