0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
||||||||||||||||
1 | ||||||||||||||||
Как правильно записать в бинарный файл структуру, в которой есть string?08.06.2019, 23:57. Показов 1790. Ответов 21
Предположим есть вот такая структура
Так работать не будет
0
|
08.06.2019, 23:57 | |
Ответы с готовыми решениями:
21
Как правильно сохранить и потом считать структуру в бинарный файл Как класс string записать в бинарный файл через вектор? Как правильно записать символьный массив в бинарный файл? Записать структуру в бинарный файл |
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
09.06.2019, 11:08 | 2 | |||||
Нет, неправильно. Надо делать
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:10 [ТС] | 3 |
Суть в том, что использовать надо именно string в структуре
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:23 | 4 |
Тогда записать так не получится.
Надо записывать/начитывать по отдельным полям - число, строка (т.е. массив символов, с нулём на конце) и т.д.
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:25 [ТС] | 5 |
oleg-m1973, А вот именно алгоритм, чтобы записать сразу всю структуру, а не каждое поле возможно найти?
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:31 | 6 |
Ну, чудес не бывает. Либо ты делаешь структуру с полями фиксированного размера и пишешь как есть, либо всё по-отдельности.
std::string - динамическая структура. Т.е сама структура отдельно, а строка отдельно. Не очень понимаю твоего вопроса, но возможно тебе достаточно будет переопределить оператор <<
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:35 [ТС] | 7 |
oleg-m1973, я правильно поняла, то есть в память структуры не входит память выделенная под string? Это как?
И про переопределение операторов. Не разбираюсь от слова совсем, если вам не сложно можете дать ссылки, чтоб почитать про это?
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
09.06.2019, 11:36 | 8 | |||||
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:37 [ТС] | 9 |
А это же бинарный файл
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:37 | 10 |
Да. Просто создай длинную строку std::string s("11234567890") и посмотри sizeof(s);
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:40 [ТС] | 11 |
Если я правильно помню, то она будет всегда одинакова, несмотря на то, какой длины
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:42 | 12 |
Насчёт ссылок ,мне тут тяжеловато. Вот нашёл что-то в гугле https://ravesli.com/urok-133-p... -i-vyvoda/
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:42 [ТС] | 13 |
Если грубо сказать, то получается, что есть string в struct, что нет, они с собой не как не взаимодействуют или что?
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:43 | 14 |
Да, правильно. Т.е. напрямую в бинарный файл её писать нельзя. Подозреваю, тебе и не нужно
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:47 [ТС] | 15 |
oleg-m1973, мне надо записать структуру в бинарный, а то есть если я делаю string.length() и именно этот размер передам для записи от этого ничего не поменяется?
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:49 | 16 |
Есть переменная, которая указывает на массив (строку). Значение этой переменной, указателя, хранится в структуре (в std::string), сам массив - совершенно в другом месте.
Добавлено через 1 минуту Нет, не поменяется. Следом тебе нужно будет записать содержимое строки, массив. Ну и начитывать соответственно.
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 11:50 [ТС] | 17 |
Вообщем записать одной строчкой в файл, а потом соответственно считать никак не выйдет?(
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.06.2019, 11:55 | 18 |
Смотря, что ты имеешь под одной строчкой.
Тупо записать, как кусок памяти - не получится. Если переопределить операторы, то их использование будет в одну строчку
0
|
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 16
|
|
09.06.2019, 12:00 [ТС] | 19 |
Ну видимо именно как кусок памяти
например если б не было этого string, то та строчка работала б как часы, но это мы уже проходили
0
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||||||
09.06.2019, 13:51 | 20 | |||||
Выше, собственно, прозрачно разъяснили.
Подобное задание могло быть при изучении Сериализации. Тогда, используя тот же Буст, как-то так
0
|
09.06.2019, 13:51 | |
09.06.2019, 13:51 | |
Помогаю со студенческими работами здесь
20
Записать структуру в бинарный файл Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл Как записать структуру в бинарный файл одним "блоком" Правильно записать бинарный файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |