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

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

Войти
Регистрация
Восстановить пароль
 
Mikle_Finsky
Сообщений: n/a
#1

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

09.10.2013, 15:13. Просмотров 373. Ответов 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++ недавно, но у меня есть такое предположение, что эти два объекта пытаются два раза освободить одно и тоже место в памяти. Но почему?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 15:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание строки из файла (C++):

Считывание строки из файла - C++
Доброго времени суток! В программе необходима реализация ввода строки из файла и дальнейшая работа с ней. Используются GTESTS. Также...

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

Считывание строки с файла - C++
Подскажите как сделать так чтобы с файла считывало не одну строку а все! #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; ...

считывание строки из файла - C++
Помогите,пожалуйста,с программой. Необходимо считать из файла строку,удалить из неё предложение в скобках(включая скобки) и записать...

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

Считывание строки из файла - C++
Здравствуйте Проблема такая: во время считывания строки из файла выносит из проги ifstream fin(&quot;in.txt&quot;); string word(&quot;&quot;); while...

2
anmartex
...
1706 / 1199 / 496
Регистрация: 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
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2013, 07:59 #3
...
Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 07:59
Привет! Вот еще темы с ответами:

Считывание строки из файла. - C++
Появилась проблема. Строка из файла считывается, но не реагирует на пробелы. И не находит конец строки. #include &lt;fstream&gt; ...

Считывание из файла по номеру строки - C++
Есть задача получить Event по номеру, из txt файла, то есть выводится такое сообщение: void UpdateFile() { std::cout &lt;&lt; &quot;Вывод всех...

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

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


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

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

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