Я пытаюсь написать N записи фиксированной длины типа структуры
const int N = 101;
char dummay[] = "#####";
struct hashTable
{
char name[51];
int RRN;
};
int main(){
fstream f("hashFile.txt");
f.seekp(0,ios::beg);
hashTable h;
for (int i = 0 ; i < N ; i++ ) {
strcpy(h.name,dummay);
h.RRN = i;
f.write((char*)&h,sizeof h);
}
и когда я пытаюсь снова вывести эти записи, только первые 25 записей работают хорошо!
f.seekp(0,ios::beg);
for (int i = 0 ; i < N ; i++ )
{
f.read((char*)&h,sizeof h);
cout << h.RRN << endl << h.name << endl;
}
полный код, почему это происходит и как это решить ?!
Вы явно записываете двоичные данные в свой файл (int, нулевой терминатор в имени и 45 символов мусора, которые могут следовать за именем)
Так что откройте его в двоичном режиме, и он будет хорошо работать:
fstream f("hashFile.txt", ios::binary);
При чтении файла в текстовом режиме, в зависимости от вашей ОС, некоторые двоичные символы могут интерпретироваться как маркер конца файла. Например Ctrl+Z на окнах (которые случаются случайно, чтобы быть ASCII-кодом 26)
Других решений пока нет …