БлогNot. Комментарии к статье #2081 (1-4)

Структура со строками string и файловые чтение/запись массива таких структур


Комментарии отсортированы по убыванию даты, нажмите сюда, чтобы отсортировать их по возрастанию даты


Автор: Tekotakita IP: определён

Больше спасибо за гайд! Долго искал нечто подобное.

04.03.2024, 05:11


Автор: Nataly (запаролен) IP: определён

Спасибо за ответ! Пример понятен, но запись просто строк - это не проблема. Хотелось какой-то красивый вариант записи именно целиком структур, содержащих строки string. Понятно, что они имеют разный размер. Все равно, спасибо за ответ. Может быть потом что-нибудь придумаю.

18.03.2019, 09:18

Ответ: Класс string всё-таки удобнее для работы с текстовыми форматами файлов. Можно и с бинарными, но тогда везде проверяйте, что максимальная длина строки не превышена. Правда, в этом случае string превращается в аналог буфера char []

Бинарные файлы вообще обычно предполагают, что размеры всех записей одинаковы, для этого есть буфер char []. Можно работать и с бинарными записями переменной длины, но это сложнее и не слишком практично.

Всё равно не пойму, какая принципиальная разница между "просто строкой" и строкой-полем структуры. Ну предусмотрите в структуре дополнительное поле типа size_t, где будет храниться текущая длина строки, как я сделал в формате файла примера. Но, опять же, что мы тогда выигрываем против char [] ?


Автор: Nataly (запаролен) IP: определён

Как все-таки корректно записать в файл структуры с полями string?

16.03.2019, 21:11

Ответ: Добавил P.S. к статье


Автор: Nataly (запаролен) IP: определён

Мне очень нравится Ваш блог. Вопрос по последней программе. Она правильно выводит результаты из файла только сразу после ввода, поскольку в структуре записаны указатели на строки (размер структуры-32) и содержание выводится из памяти. Если выделить блок чтения из файла в отдельную программку, она ничего не прочитает, ведь в файле информации нет, есть только указатели, а зачем они нужны, если память уже стерта.

16.03.2019, 21:02

Ответ: Данные-то в файле будут, мы пишем не указатели, а строки (см. скриншот 16-ричного вида файла). Другое дело, что при чтении у нас не будет информации о длине именно поля string. В общем, добавил P.S. к статье