Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Mikle_Finsky
0 / 0 / 1
Регистрация: 06.10.2013
Сообщений: 1
#1

Считывание строки из файла - C++

09.10.2013, 15:13. Просмотров 391. Ответов 2
Метки нет (Все метки)

Здравствуйте. Есть такой класс (это упрощенный тестовый класс):
C++
1
2
3
4
5
6
7
8
9
class test_string
{
    std::string s;
public:
    test_string(const std::string &t = " ")
        :s(t){}
    std::string GetStr() const {return s;} 
    void SetStr(const std::string &t) { s = t;}
};
Создаю объект от этого класса и записываю его в бинарный файл, потом хочу его считать из этого файла. Но считывать я пытаюсь не обратно в эту же переменную, а через промежуточную (buff). Так как это упрощенная программа (только для того что-бы показать ошибку), но в полноценной программе, все объекты класса test_string хранятся в динамическом массиве (допустим std::vector<test_string>v_str), т.е. при считывание я сначала считываю в буффер, а потом v_str.push_back(buff).
А теперь к проблеме.

Если я при записи и считывание использую одну и туже переменную, то программа завершается корректно и все выводит.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    test_string s("Hello, world"), s2;
 
    cout << s.GetStr() << endl;
    cout << s2.GetStr() << endl;
 
    std::fstream io;
    io.open("TEST.dat", std::ios_base::out | std::ios_base::binary);
    io.write((char *)&s, sizeof s);
    io.close();
 
    s.SetStr(" ");
    io.open("TEST.dat", std::ios_base::in | std::ios_base::binary);
    io.read((char *)&s, sizeof s);
    io.close();
 
    cout << s.GetStr() << endl;
        return 0;
}
Если же я использую разные переменные.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    test_string s("Hello, world"), s2;
 
    cout << s.GetStr() << endl;
    cout << s2.GetStr() << endl;
 
    std::fstream io;
    io.open("TEST.dat", std::ios_base::out | std::ios_base::binary);
    io.write((char *)&s, sizeof s);
    io.close();
 
    
    io.open("TEST.dat", std::ios_base::in | std::ios_base::binary);
    io.read((char *)&s2, sizeof s2);
    io.close();
    cout << s2.GetStr() << endl;
То все выводит, но программа завершается некорректно (зависанием), сейчас я не могу предоставить ошибку, т.к. сейчас не имею доступа к MS VS 2012, а VS 2010 Exp ошибку не выводит, а просто просит закрыть программу.

P.S. Я в C++ недавно, но у меня есть такое предположение, что эти два объекта пытаются два раза освободить одно и тоже место в памяти. Но почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 15:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Считывание строки из файла (C++):

считывание строки из файла
Помогите,пожалуйста,с программой. Необходимо считать из файла строку,удалить...

Считывание строки из файла
Здравствуйте Проблема такая: во время считывания строки из файла выносит из...

Считывание строки из файла
Пишу что-то типа простой авторизации на c++, нужно взять из файла определенную...

Считывание строки с файла
Подскажите как сделать так чтобы с файла считывало не одну строку а все!...

Считывание строки из файла.
Появилась проблема. Строка из файла считывается, но не реагирует на пробелы....

Считывание строки из файла
Доброго времени суток! В программе необходима реализация ввода строки из...

2
anmartex
...
1709 / 1202 / 909
Регистрация: 12.02.2013
Сообщений: 1,978
10.10.2013, 07:47 #2
Mikle_Finsky, класс test_string, в вашем случае, не является POD структурой, и соответственно следующее является грубейшей ошибкой:
C++
1
2
3
4
5
    // line 10
    io.write((char *)&s, sizeof s);
 
    // line 15
    io.read((char *)&s2, sizeof s2);
1
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2013, 07:59 #3
...
http://www.cyberforum.ru/cpp-beginners/thread971532.html
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 07:59
Привет! Вот еще темы с решениями:

Считывание строки из файла
Что то не врублю, как считать полностью всё содержимое файла и занести его в...

Считывание из файла по номеру строки
Есть задача получить Event по номеру, из txt файла, то есть выводится такое...

Считывание из файла до конца строки
Нужно написать программу, которая создаёт файл, каждая строка которого содержит...

Считывание строки с текстового файла
Напишите пожалуйстанаброски как можно считать строку с текстового файла ,для...


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

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

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