C++のファイルストリームに関して
Posted: 2012年6月29日(金) 13:26
バイナリファイルで書き込む際にコンストラクタとデストラクタでしっかり開放してくれるらしいので便利だと思うのですが何故第一引数が(char*)なのですか?。
(例
Cではfwrite(const void *buf, size_t size, size_t n, FILE *fp)
だったので(指すアドレス(アドレスはどれも4byteのはずですから(但し32bit)),何の型か(何byteか),要素数,ファイルポインタ)
と分かりやすかったのですが、ファイルストリームでは単位ごとのサイズ指定が無くなっています。
またポインタの仕組みさえ分かればこういうことも出来ますから、fwrite内部で似たような事をしてると思います。
だとしたら、型のサイズも取らないで内部でどういった処理をしているのか気になりました。
仕様だからとかそういうのはなしでお願いします。
何故char*なのかの理由が知りたいです。
(例
#include <fstream>
#include <iostream>
using namespace std;
void main(){
int a=10;
cout<<a<<endl;//確認用出力
ofstream ofs("a.txt",ios::out|ios::binary);
if (!ofs){
cout << "ファイル file.txt が開けません";
return;
}
ofs.write((char*)&a,1);
ofs.close();
a=0;
cout<<a<<endl;//確認用出力
ifstream ifs("a.txt",ios::out|ios::binary);
ifs.read((char*)&a,1);
cout<<a<<endl;//確認用出力
}
だったので(指すアドレス(アドレスはどれも4byteのはずですから(但し32bit)),何の型か(何byteか),要素数,ファイルポインタ)
と分かりやすかったのですが、ファイルストリームでは単位ごとのサイズ指定が無くなっています。
またポインタの仕組みさえ分かればこういうことも出来ますから、fwrite内部で似たような事をしてると思います。
void main(){
int a[2]={48,49};
char *p=a;
printf(p);
putchar('\n');
p+=sizeof(int);//4でも可(int 型の変数は4バイトなので)
printf(p);
}
仕様だからとかそういうのはなしでお願いします。
何故char*なのかの理由が知りたいです。