Russian Qt Forum

Qt => Вопросы новичков => Тема начата: xonotic от Сентябрь 20, 2011, 22:25



Название: Помогите разобраться с QString
Отправлено: xonotic от Сентябрь 20, 2011, 22:25
В общем проблема следующая. Все выполняется на linux 64 bit, есть сторонняя библиотека с функцией, которой аргументом передается некая структура. Одно из полей этой структуры типа
Код
C++ (Qt)
char *
.
Для наглядности приведу два упрощенных класса, которые отражают различия в поведении при различном присваивании значения полю структуры.

Код
C++ (Qt)
class MyClass{
private:
    QString* m_str;
public:
    MyClass(const QString& str){
         m_str = new QString(str);
    }
 
    void execute(){
         THIRDPARTYSTRUCT s;
         s.member = m_str->toAscii().data();              // <-------------- See here
         qDebug(third_party_function(s));
    }
}
 
class MyClass2{
private:
    QString* m_str;
public:
    MyClass2(const QString& str){
         m_str = new QString(str);
    }
 
    void execute(){
         THIRDPARTYSTRUCT s;
         s.member = "test";              // <-------------- See here
         qDebug(third_party_function(s));
    }
}
 
MyClass *c = new MyClass("test");
MyClass2 *c2 = new MyClass2("test");
c->execute(); // executed with error
c2->execute(); // executed ok
 
 
Необходимо, чтобы работал MyClass.
Смотрел память в отладчике. Адреса, конечно, в первом и во втором случае разные, но значения по ним совпадают. Подскажите, в чем может быть проблема.


Название: Re: Помогите разобраться с QString
Отправлено: Пантер от Сентябрь 20, 2011, 22:32
Так делать нельзя. Сначала создаешь s.member = new char [что-то там], а потом юзаешь strcpy.


Название: Re: Помогите разобраться с QString
Отправлено: BRE от Сентябрь 21, 2011, 08:13
Код
C++ (Qt)
class MyClass
{
private:
    QByteArray m_buf;
public:
    MyClass(const QString& str)
         : m_buf( str.toAscii() ) {
    }
 
    void execute(){
         THIRDPARTYSTRUCT s;
         s.member = m_buf.constData();
         qDebug(third_party_function(s));
    }
}