このような配列int a[5]
では、a[0]からa[4]までの5つの値を格納できます。これではない..?
にchar mobile[10]
変数がclass
あり、この変数に正確に10文字の長さの文字列を格納していました。しかし、ファイルから読み取っているとき、次の変数(クラス内のこの変数の直後に宣言されている)の数文字が変数に追加されていますmobile
。何が悪いのかを調査するのに何時間もかかりました。
変数の順番などを変えて、できる限りのことをしてみました。
最後に、サイズmobile
を11(char mobile[11]
)に設定し、それをバイナリファイルに保存します。その後、すべてがうまくいきます。
ここで、私の研究を実証できるデモプログラムを作成しました。
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
#include <stdio.h>
class Test
{
public:
char mobile[10], address[30];
};
void main()
{
clrscr();
Test t;
// uncoment below to write to file
/*strcpy(t.mobile, "1234567890");
strcpy(t.address, "Mumbai");
fstream f("_test.bin", ios::binary | ios::out | ios::app);
f.write((char*)&t, sizeof(t));*/
// uncomment below to read from file
/*fstream f("_test.bin", ios::binary | ios::in);
f.read((char*)&t, sizeof(t));
cout << t.mobile << "\t" << t.address;*/
f.close();
getch();
}
char[n]
より具体的にはバイナリファイルでファイルを操作するときのように、配列にn文字を格納できないという私の仮定は正しいですか?
必要なサイズの余分なサイズを常に1つ取る必要があります..??
私のコンパイラはTurboC++(3.0かもしれません)です。非常に古く、製造中止の製品です。