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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не удается открыть включение http://www.cyberforum.ru/cpp-beginners/thread972965.html
Как исправить?
C++ Вылетает при введении данных в структуру. Делаю структуру вроде бы работает но вылетает после введение данных не пойму.Помогите пожалусто. #include<conio.h> #include<stdio.h> #include<math.h> #include<stdlib.h> typedef struct kniga {... http://www.cyberforum.ru/cpp-beginners/thread972953.html
Разработать приложение, позволяющее строить разными цветами графики линейной функции C++
Разработать приложение, позволяющее строить разными цветами графики линейной функции y = ax + b и квадратного трехчлена z = ax^2 + bx + c по введенным значениям a, b и c. Отобразить на экране...
C++ Написать программу, которая предлагает пользователю ввести число, вычисляет его разрядность и сумму всех цифр и выводить результаты в консоль
Help! Написать программу, которая предлагает пользователю ввести число, вычисляет его разрядность и сумму всех цифр и выводить результаты в консоль. использовать только while rand() switch и if
C++ Написать программу, которая предлагает пользователю ввести 10 чисел, вычисляет процент положительных и отрицательных чисел и процент нулей и выводи http://www.cyberforum.ru/cpp-beginners/thread972944.html
помогите =) написать программу, которая предлагает пользователю ввести 10 чисел, вычисляет процент положительных и отрицательных чисел и процент нулей и выводит результат в консоль использовать...
C++ Написать игру “Угадай число!”. Компьютер загадывает число в определенном диапазоне, а пользователь пытается его угадать помогите решить Написать игру “Угадай число!”. Компьютер загадывает число в определенном диапазоне, а пользователь пытается его угадать. пользовоталь выбирает диапазон и вводит число если... подробнее

Показать сообщение отдельно
Mikle_Finsky

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

09.10.2013, 15:13. Просмотров 380. Ответов 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++ недавно, но у меня есть такое предположение, что эти два объекта пытаются два раза освободить одно и тоже место в памяти. Но почему?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru