Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
#1

Можно ли записывать объекты класса string в память, чтоб потом их прочитать? - C++

15.05.2013, 01:16. Просмотров 620. Ответов 19
Метки нет (Все метки)

Создал класс, который содержит много объектов класса string, но что то не так как надо. В debug режиме удаётся прочитать и вывести, но компилятор после этого выдаёт что-то нехорошее. В режиме release даже не выводит на экран строки. Можно ли вообще объекты класса string просто записать как outfile.write(reinterpret_cast<char*>(&dummyobj), sizeof(dummyobj)), а потом прочитать как infile.read(reinterpret_cast<char*>(&dummyobj), sizeof(dummyobj))?

Добавлено через 13 минут
Компилятор совсем странно себя ведёт. Сейчас в release всё нормально, а вот debug застревает. Я пытаюсь прочитать данные после записи, в новой программе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 01:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли записывать объекты класса string в память, чтоб потом их прочитать? (C++):

Можно ли динамически выделить память под массив указателей, на объекты класса? - C++
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли строчку VisualizationTools* VT; заменить...

Разработка класса String, на основании которого можно создавать объекты типа "строка символов" - C++
Дали задание сделать класс строка. Класс должен давать возможность создавать программы, в которых реализовывается обработка строк...

Разработать другую версию предыдущей задачи используя объекты класса String - C++
Начал изучение строк в С++. Дана задача, которую нужно решить двумя способами. С первой частью - решить задачу используя для ввода строк...

Можно ли использовать объекты одного класса в другом? - C++
И если можно то как? Например если определить это так(предположим что есть два класса - employee и date) class employee { ...

Как используя C-String а потом и String class варьировать вывод? - C++
Дана задача: при вводе полного И.О.Ф. (в таком порядке) выводить Ф, И и О(только первую букву и .). И если О не задано - выводить только...

Можно ли записывать объекты в массивы - QBasic
Подскажите пожалуйста, как сделать массив кубиков?

19
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
15.05.2013, 01:25 #2
Цитата Сообщение от Асурус Посмотреть сообщение
Можно ли вообще объекты класса string просто записать как outfile.write(reinterpret_cast<char*>(&dummyobj), sizeof(dummyobj)), а потом прочитать как infile.read(reinterpret_cast<char*>(&dummyobj), sizeof(dummyobj))?
Нет, нельзя, записывай каждую строку отдельно.
1
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
15.05.2013, 01:28 #3
C++
1
str.size() * sizeof(std::string::value_type); //str.size() * sizeof(char)
0
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
15.05.2013, 01:31  [ТС] #4
Во втором ответе почти ничего не понял, но спасибо за труды.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.05.2013, 12:27 #5
stima, sizeof(char) равен 1 по определению.
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
15.05.2013, 13:26 #6
2Tulosba И?)) Есть такое понятие лучше явное чем не явное.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.05.2013, 13:43 #7
stima, явное умножение на 1 лучше, чем отсутствие этого умножения?
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
15.05.2013, 13:57 #8
умножение на sizeof(char) лучше чем без, а вдург завтра выйдет стандарт говорящий что char может быть от 1 до 3?)
0
Croessmah
15.05.2013, 13:59
  #9

Не по теме:

Цитата Сообщение от stima Посмотреть сообщение
стандарт говорящий что char может быть от 1 до 3?)
не волнуйтесь - не выйдет

Цитата Сообщение от Tulosba Посмотреть сообщение
явное умножение на 1 лучше, чем отсутствие этого умножения?
Скорее всего это просто будет вырезано компилятором как рудимент

0
Tulosba
15.05.2013, 14:07
  #10

Не по теме:

Цитата Сообщение от stima Посмотреть сообщение
а вдург завтра выйдет стандарт говорящий что char может быть от 1 до 3?)
главное чтоб не 0.5

2
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
15.05.2013, 23:00  [ТС] #11
А объект класса string вообще в память можно записать?

Добавлено через 51 секунду
Я имею ввиду, чтобы потом, при новом запуске программы считать его без проблем?
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
15.05.2013, 23:40 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <string>
#include <fstream>
#include <iostream>
 
int main()
{
    std::fstream fs;
    std::string str = "Data";
 
    fs.open("file.txt", std::fstream::out);
    if (!fs.is_open())
         return 1;
  
    fs << str;
 
    str.clear();
    fs.close();
 
    fs.open("file.txt", std::fstream::in);
    if (!fs.is_open())
         return 1;
    
    fs >> str;
    std::cout << str << std::endl;
    
    return 0;
}
0
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
15.05.2013, 23:56  [ТС] #13
Да, это всё понятно, но только ничего не работает, если например взять другой объект класса string, не тот, который использовали для записи. Так же будет, если запустить программу и не записывая, считать данные. У меня никак не получалось прочитать информацию, работало только до первых трёх символов, я и обычно использую не текстовое сохронение, а бинарное.
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
16.05.2013, 00:14 #14
Я не телепат код в студию
0
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
16.05.2013, 01:06  [ТС] #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdafx.h"
#include <string>
#include <fstream>
#include <iostream>
 
int main()
{
    std::fstream fs;
    std::string str = "Data", str2;
 
    fs.open("file.txt", std::fstream::out);
    if (!fs.is_open())
         return 1;
  
    fs << str;
 
    str.clear();
    fs.close();
 
    fs.open("file.txt", std::fstream::in);
    if (!fs.is_open())
         return 1;
    
    fs >> str2;
    std::cout << str << std::endl;
    
    system("pause");
    return 0;
}
0
16.05.2013, 01:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2013, 01:06
Привет! Вот еще темы с ответами:

Создавать объекты класса динамически а потом перебирать их по очереди - C++ Builder
Скачал книгу Лаптева С++ ООП, искомого результата не нашол. У меня есть класс который описывает персонажа. Таких персонажей будет от 1 до...

Можно ли объявлять в описании одного класса объекты другого класса - C++ Builder
Здравствуйте! Помогите, пожалуйста, разобраться: я описал класс SignalZakon, а теперь хочу создать объекты этого класса (k, T1 и Т2) в...

Где размещать объявления класса, чтобы объекты этого класса можно объявлять в нескольких Form - C#
Вопрос тупой. Так получилось, что надо написать прогу в Visual C# вместо билдера. Где размещать объявления класса, чтобы объекты этого...

Можно ли скинуть пароль от biosa на флеш чтоб потом его востонавливать? - Компьютерное железо
:wall::wall::wall::wall::wall::wall:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru