|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.01.2013, 01:08 | #41 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Можно поле std::string расположить в конце структуры и читать/писать в файл
в два приема: сначала простые типы общей длиной sizeof(Programs) - sizeof(std::string) а потом уже особым способом строку. |
16.01.2013, 01:14 | #42 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 33
|
А в этом случае sizeof(std::string) точно вычислит длину строки, или в std::string она всегда одинаковая (максимально-возможная)? В этом случае размер файла будет "раздут". Или я не прав?
|
16.01.2013, 01:24 | #43 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
sizeof(std::string) - одинаков для любых строк.
Дело в том что ее нутро примитивное. Условно такое. Код:
Класс строка содержит указатель и длина класса равна длине указателя. (допустим четыре байта). Когда нужно сохранить строку бессмысленно сохранять адрес этого указателя. Нужно прочитать всю память по адресу который в этом указателе содержится и закончить чтение по признаку окончания строки \0 |
16.01.2013, 01:24 | #44 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
sizeof(std::string) - одинаков для любых строк.
Дело в том что ее нутро примитивное. Условно такое. Код:
Класс строка содержит указатель и длина класса равна длине указателя. (допустим четыре байта). Когда нужно сохранить строку бессмысленно сохранять адрес этого указателя. Нужно прочитать всю память по адресу который в этом указателе содержится и закончить чтение по признаку окончания строки \0 |
16.01.2013, 19:59 | #45 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 33
|
Спасибо большое. Кажется теперь мне все ясно. Получается в плане экономии места на диске std::string будет правильней, чем char[]. Потому что, если я правильно понял, располагаться в файле они будут так: под char[], будет выделено место под каждый символ не зависимо от того будет он туда записан или нет, под std::string - место под указатель на какое-то место в файле и если в строке ничего не записано то на этом месте только признак окончания строки. Если я не прав - поправьте пожалуйста. А как быть,если строчек не одна, а даже несколько массивов строк, в конец писать не получится, или...
|
16.01.2013, 20:57 | #46 | ||
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
Цитата:
Длина каждой строки при записи в файл известна. При чтении из файла длина конкретной строки выявляется в цикле. |
||
16.01.2013, 21:03 | #47 | |
Пользователь
Регистрация: 14.01.2013
Сообщений: 33
|
Цитата:
|
|
17.01.2013, 00:41 | #48 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Код:
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
17.01.2013, 02:20 | #49 |
Пользователь
Регистрация: 14.01.2013
Сообщений: 33
|
Теоретически думал об этом. Но самостоятельно реализовать пока не в состоянии.
|
17.01.2013, 04:10 | #50 | |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
Vlad9999, такие задачи пишутся, как слышатся ) Бездумно и линейно Код:
Последний раз редактировалось EUGY; 17.01.2013 в 08:40. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка в структурах[C++] | druger | Помощь студентам | 0 | 22.03.2012 19:07 |
не совсем понял пример в методичке о структурах (С++) | severest | Общие вопросы C/C++ | 1 | 18.04.2011 20:01 |
Работа с файлами в структурах | ХреновыйПрогер | Общие вопросы C/C++ | 5 | 23.12.2010 21:46 |
Массивы и структуры в структурах (Задача в С++) | bel_ka | Общие вопросы C/C++ | 4 | 16.12.2007 15:31 |