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

Я пытаюсь написать 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 на окнах (которые случаются случайно, чтобы быть ASCII-кодом 26)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]