Проблема здесь не в том, что вы неправильно читаете или записываете байты с диска. Скорее проблема, с которой вы сталкиваетесь, заключается в том, что эти байты не означают того, что вы хотите, чтобы они имели в виду.
В вашем классе есть член данных name
, то есть const char *
. Это указатель на какое-то место в памяти, которое содержит имя. Когда вы используете функцию write
для записи данных с вашего типа на диск, он хранит этот указатель где-то на диске. Когда вы затем загружаете данные с диска, он перезагружает этот указатель.
Проблема в том, что указатель не то, что вы хотите сохранить. Если вы перезагрузите указатель с диска, он будет указывать на то же место в памяти, что и раньше, но нет никаких оснований подозревать, что вы найдете имя студента в памяти в том месте, куда он указывает. Если вы закрыли программу, а затем снова открыли ее, вы не должны видеть никакой памяти из предыдущего запуска.
Чтобы это исправить, вам нужно изменить способ записи данных на диск. Вместо того, чтобы копировать необработанные байты из класса, вместо этого посмотрите, можете ли вы найти способ записать имя и возраст таким образом, чтобы вы могли затем прочитать эти данные обратно. Например, возможно, вы бы записали их на диск как возраст, затем пробел, затем имя.
Надеюсь, это поможет!