Вы правы: поскольку вы делаете это сейчас, нет способа прочитать содержимое, потому что вы не можете сказать, где заканчивается одна строка и начинается следующая.
Совет, который вы цитируете, чтобы избегать использования fwrite () для структурированных данных, хорош, но интерпретация этого совета, означающая, что вы должны fwrite () для каждого элемента в отдельности, может быть не лучшим решением.
Я думаю, вам следует рассмотреть возможность использования другого формата для вашего файла вместо записи необработанных значений с помощью fwrite (). (Например, ваши файлы не будут переноситься на компьютер с другим порядком байтов.)
Поскольку похоже, что большинство ваших элементов являются строками и целыми числами, рассматривали ли вы текстовый формат с использованием fprintf () для записи и fscanf () для чтения? Одним большим преимуществом текстового формата вместо двоичного формата для конкретного приложения является то, что вы можете просматривать его стандартными инструментами (для отладки и т. Д.)
Кроме того, какой бы формат вы ни выбрали, убедитесь, что вы учитываете возможность добавления дополнительных полей в будущем. Как минимум, это означает, что вы должны включить номер версии в какой-то заголовок, либо для самого файла, либо для каждой отдельной записи. Более того, пометьте отдельные поля (для учета необязательных атрибутов), например:
name: user1
address: 1600 pennsylvania ave
favorite color: blue
name: user2
address: 1 infinite loop
last login: 12th of never