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

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

Войти
Регистрация
Восстановить пароль
 
 
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
#1

Преобразование string* в string - C++

20.10.2016, 16:42. Просмотров 480. Ответов 40
Метки нет (Все метки)

Здравствуйте, друзья.
У меня есть класс. В нем описано поле
C++
1
string *GPS;
В конструкторе выделяю память. Передаю именно *_GPS для использования метода инициализации.
C++
1
2
3
Class::Class (string *_GPS) {
GPS = new string;
}
Мне необходимо сначала считать строку GPS из файла. Но как без проблем ее считать не удалось найти, поэтому решил обходом сделать
C++
1
2
3
4
5
6
char *buf = new char [100];
fstream ip ("data/ip.txt", ios::in);
ip.getline(buf, 100);
ip.close();
string TEMP_GPS (buf, strlen(buf));
*GPS = TEMP_GPS;
И последняя строка у меня не работает. Код компилируется, но падает на этой строчке.

Подскажите, пожалуйста, как мне лучше считать в ДИНАМИЧЕСКУЮ string* строку объекта С ПРОБЕЛАМИ?
Может какой-нибудь другой способ есть, а он 100% есть?
Заранее спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GbaLog-
Не Эксперт C++
2322 / 947 / 248
Регистрация: 24.08.2014
Сообщений: 3,537
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 16:55     Преобразование string* в string #2
Цитата Сообщение от dreamn Посмотреть сообщение
Подскажите, пожалуйста, как мне лучше считать в ДИНАМИЧЕСКУЮ string* строку объекта С ПРОБЕЛАМИ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::string* str = new std::string{};
    std::getline( std::cin, *str );
    std::cout << *str << std::endl;
}
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:02  [ТС]     Преобразование string* в string #3
Цитата Сообщение от dreamn Посмотреть сообщение
Мне необходимо сначала считать строку GPS из файла.
Соответственно, вопрос
Цитата Сообщение от dreamn Посмотреть сообщение
Подскажите, пожалуйста, как мне лучше считать в ДИНАМИЧЕСКУЮ string* строку объекта С ПРОБЕЛАМИ?
Также из файла
GbaLog-
Не Эксперт C++
2322 / 947 / 248
Регистрация: 24.08.2014
Сообщений: 3,537
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 17:03     Преобразование string* в string #4
Цитата Сообщение от dreamn Посмотреть сообщение
Также из файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::string* str = new std::string{};
    std::ifstream f_in( "file.txt" );
    std::getline( f_in, *str );
    std::cout << *str << std::endl;
}

Не по теме:

Зачем только строку в динамической памяти создавать?

dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:11  [ТС]     Преобразование string* в string #5
Цитата Сообщение от GbaLog- Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
 std::string* str = new std::string{};
 std::ifstream f_in( "file.txt" );
 std::getline( f_in, *str );
 std::cout << *str << std::endl;
}
Падает
nmcf
4776 / 4114 / 1376
Регистрация: 14.04.2014
Сообщений: 16,143
20.10.2016, 17:15     Преобразование string* в string #6
Память ещё и освободить нужно.
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:19  [ТС]     Преобразование string* в string #7
Цитата Сообщение от nmcf Посмотреть сообщение
Память ещё и освободить нужно.
Это не относится к падению, т.к. именно на этой строке падает
nmcf
4776 / 4114 / 1376
Регистрация: 14.04.2014
Сообщений: 16,143
20.10.2016, 17:23     Преобразование string* в string #8
На какой?
GbaLog-
Не Эксперт C++
2322 / 947 / 248
Регистрация: 24.08.2014
Сообщений: 3,537
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 17:24     Преобразование string* в string #9
Цитата Сообщение от dreamn Посмотреть сообщение
Падает
Не знаю, что у Вас там падает, у меня всё нормально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::string* str = new std::string{};
    std::ifstream f_in( "file.txt" );
    while( f_in )
    {
        std::getline( f_in, *str );
        std::cout << *str << std::endl;
    }
}
file.txt
Код
qweq
qwe

wqjelq
sadqwlkasd
result
Код
g++ -Wall -std=c++14 new1.cpp -o new1.exe
g++ -Wall -std=c++14 new1.cpp -o new1.exe
Process started >>>
<<< Process finished. (Exit code 0)
================ READY ================
new1.exe
new1.exe
Process started >>>
qweq
qwe

wqjelq
sadqwlkasd
sadqwlkasd
<<< Process finished. (Exit code 0)
gru74ik
Модератор
Эксперт CЭксперт С++
3897 / 1655 / 188
Регистрация: 20.02.2013
Сообщений: 4,715
Записей в блоге: 21
20.10.2016, 17:25     Преобразование string* в string #10
dreamn, чего пишет-то? Скрин ошибки в студию. Поди C++14 не подключил, а туда же - "падает".
nmcf
4776 / 4114 / 1376
Регистрация: 14.04.2014
Сообщений: 16,143
20.10.2016, 17:27     Преобразование string* в string #11
Убери эти скобки
C++
1
std::string* str = new std::string;
GbaLog-
Не Эксперт C++
2322 / 947 / 248
Регистрация: 24.08.2014
Сообщений: 3,537
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 17:29     Преобразование string* в string #12
Хотя нет, два раза последнюю строку выводит, ну тут дело в while цикле, я думаю.
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:52  [ТС]     Преобразование string* в string #13
Сейчас скрины загружу

Добавлено через 19 минут
Не могу скриншот отправить, напишу текстом.
Когда запускаю код, программа работает ровно до момента считывания (ставил cout'ы), никакого сообщения текстового об ошибки нет за исключением сообщения среды
C++
1
ВЫПОЛНЕНИЕ FAILED (значение выхода 139,, общее время: 2s)
Напомню, что это я описываю метод в классе, и записать необходимо в динамическое поле объекта типа string*
GbaLog-
Не Эксперт C++
2322 / 947 / 248
Регистрация: 24.08.2014
Сообщений: 3,537
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 18:24     Преобразование string* в string #14
Цитата Сообщение от dreamn Посмотреть сообщение
Напомню, что это я описываю метод в классе, и записать необходимо в динамическое поле объекта типа string*
Может класс покажите?
nd2
1552 / 1280 / 430
Регистрация: 29.01.2016
Сообщений: 3,952
20.10.2016, 19:53     Преобразование string* в string #15
Цитата Сообщение от GbaLog- Посмотреть сообщение
Хотя нет, два раза последнюю строку выводит, ну тут дело в while цикле, я думаю.
C++
1
2
3
4
    while( std::getline( f_in, *str ) )
    {
         std::cout << *str << std::endl;
    }
hoggy
6010 / 2450 / 437
Регистрация: 15.11.2014
Сообщений: 5,427
Завершенные тесты: 1
20.10.2016, 19:56     Преобразование string* в string #16
Цитата Сообщение от dreamn Посмотреть сообщение
необходимо сначала считать строку GPS из файла. Но как без проблем ее считать

C++
1
2
3
std::string line;
fstream ip ("data/ip.txt", ios::in);
io >> line;
nd2
1552 / 1280 / 430
Регистрация: 29.01.2016
Сообщений: 3,952
20.10.2016, 20:20     Преобразование string* в string #17
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
30
31
32
33
34
35
class Class
{
    string* GPS;
public:
    Class()
    { GPS = new string; }
    
    ~Class()
    { delete GPS; }
    
    void read()
    {
        ifstream fin ("file.txt");
        if (fin)
        {
            getline(fin, *GPS);
            fin.close();
        }
    }
    
    const string* get() const
    { return GPS;}
 
};
 
int main()
{
    
    Class obj;
    obj.read();
    cout << *(obj.get()) << endl;
 
    system("pause");
    return 0;
}
Миниатюры
Преобразование string* в string  
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 11:44  [ТС]     Преобразование string* в string #18
Класс
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
30
31
32
33
34
35
36
37
38
class phoneClass {
private:
    float   *thickness,      //Толщина
            *width,          //Ширина
            *length,         //Длина
            *weight;         //Вес
    string  *model,          //Модель
            *mark;           //Марка
    string  *GPS;            //Местонахождение
    bool err;                //Индентификатор ошибки 
    bool Init (float, float, float, float, string*, string*, string*);
    
public:
    bool iF = false, iS = false, iB = false, iG = false, iCon = false, iCall = false, iSms = false;
    
    phoneClass();
    phoneClass(float, float, float, float, string*, string*, string*, bool&);
    void actScreenshot();        //Скриншот
    void actFlashligth();        //Фонарик
    void actBrowser();           //Браузкер
    void actGPS();               //GPS
    int actContacts();          //Контакты
    int actCall();              //Звонок
    int actSms();               //Смс
    virtual ~phoneClass();
    void setMark(string* mark);
    string* getMark() const;
    void setModel(string* model);
    string* getModel() const;
    void setWeight(float* weight);
    float* getWeight() const;
    void setLength(float* length);
    float* getLength() const;
    void setWidth(float* width);
    float* getWidth() const;
    void setThickness(float* thickness);
    float* getThickness() const;
};
Конструктор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
phoneClass::phoneClass(float _thickness, float _width, float _length, float _weight, string* _model, string* _mark, string* _GPS, bool &err) {
    cout << "phoneClass::phoneClass(float _thickness, float _width, float _length, float _weight, string* _model, string* _mark, bool &err)" << endl;
 
    thickness = new float;
    width = new float;
    length = new float;
    weight = new float;
    model = new string;
    mark = new string;
    GPS = new string;
 
    if (!Init(_thickness, _width, _length, _weight, _model, _mark, _GPS)) {
        cout << "Error in phoneClass::phoneClass(float* _thickness, float* _width, float* _length, float* _weight, string* _model, string* _mark)" << endl;
        delete this;
        err = false;
    }
    else err = true;
}
Инициализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool phoneClass::Init(float _thickness, float _width, float _length, float _weight, string* _model, string* _mark, string* _GPS) {
    cout << "bool phoneClass::Init(float* _thickness, float* _width, float* _length, float* _weight, string* _model, string* _mark)" << endl;
    if ((_thickness>0)&&(_width>0)&&(_length>0)&&(_weight>0)&&(!_model->empty())&&(!_mark->empty())) {
        *thickness = _thickness;
        *width = _width;
        *length = _length;
        *weight = _weight;
        model = _model;
        mark = _mark;
        GPS = _GPS;
 
        return true;
    }
    else {
        cout << "Error bool phoneClass::Init(float* _thickness, float* _width, float* _length, float* _weight, string* _model, string* _mark)" << endl;
        return false;
    }
}
Метод actGPS
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
30
31
32
void phoneClass::actGPS() {
    cout << "void phoneClass::actGPS()" << endl;
    char *buf = new char [100];
    
    if (iG == false) {
        cout << "iG = FALSE" << endl;
        ifstream f_in( "data/ip.txt" );
        cout << "FILE OPENED" << endl;
        getline( f_in, *GPS );
        cout << "READ STR" << endl;
        /*fstream ip ("data/ip.txt", ios::in);
        
        ip.getline(buf, 100);
        
        cout << "BUF = " << buf << endl;
        ip.close();
        string TEMP_GPS (buf, strlen(buf));
        cout << "TEMP_GPS = " << TEMP_GPS << endl;
        *GPS = TEMP_GPS;
        cout << "GPS = " << *GPS << endl;
        cout << "FILE CLOSED" << endl;*/
        iG = true;
        cout << "iG = TRUE" << endl;
    }
    else {
        cout << "iG = TRUE" << endl;
        *GPS = "Unknown";
        cout << "GPS = UNKNOWN" << endl;
        iG = false;
        cout << "iG = FALSE" << endl;
    }
}
Добавлено через 1 минуту
Цитата Сообщение от nd2 Посмотреть сообщение
C++
Скинул свой код.
По сути точно также описано все, но падает на строчке чтения

Добавлено через 59 секунд
Цитата Сообщение от hoggy Посмотреть сообщение
C++
1
2
3
std::string line;
fstream ip ("data/ip.txt", ios::in);
io >> line;
Необходимо динамический string
John999
223 / 106 / 49
Регистрация: 17.10.2016
Сообщений: 312
21.10.2016, 11:50     Преобразование string* в string #19
Цитата Сообщение от dreamn Посмотреть сообщение
Необходимо динамический string : string *
перепутал с char* ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 11:56     Преобразование string* в string
Еще ссылки по теме:

C++ Преобразование string в char*
Преобразование int в string C++
C++ Преобразование string в int
Преобразование шаблона к string C++
Преобразование String^ в char* C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,738
Записей в блоге: 2
Завершенные тесты: 1
21.10.2016, 11:56     Преобразование string* в string #20
Цитата Сообщение от dreamn Посмотреть сообщение
delete this;
по рукам еще не били?
Yandex
Объявления
21.10.2016, 11:56     Преобразование string* в string
Ответ Создать тему
Опции темы

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