Запись записей фиксированной длины в файл C++

Я пытаюсь написать 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;
}

полный код, почему это происходит и как это решить?!

1 ответ

Решение

Вы явно записываете двоичные данные в свой файл (int, нулевой терминатор в имени и 45 символов мусора, которые могут следовать за именем).

Так что откройте его в двоичном режиме, и он будет хорошо работать:

fstream f("hashFile.txt", ios::binary); 

При чтении файла в текстовом режиме, в зависимости от вашей ОС, некоторые двоичные символы могут интерпретироваться как маркер конца файла. Например, Ctrl+Z на окнах (которые случайно представляют собой код 26 ascii)

Другие вопросы по тегам