QString to char or *char |
Здравствуйте, гость ( Вход | Регистрация )
QString to char or *char |
greh |
6.3.2010, 17:37
Сообщение
#1
|
Студент Группа: Участник Сообщений: 48 Регистрация: 23.11.2009 Пользователь №: 1252 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток. Помогите решить проблему.
Гугл помог не до конца: CODE QString test="501"; char* value=new char[100]; char* sometext=test.toAscii().data(); value=sometext; ui->label->setText(QString(value)); в label записывается 0. |
|
|
Анна |
24.3.2010, 17:31
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
Забавно, я сплош и рядом пользуюсь test.toAscii().data(), если мне надо передать внутрь функции char*.
Только я сразу передаю, без лишних присвоений. Видимо, вот что происходит: test.toAscii() создает временный массив QBaytArray и набивает его буковками, тот возвращает указатель на свои данные data(), а, когда отработало sometext=test.toAscii().data(); массив QBaytArray, перестает существовать. Следовательно и указатель на данные из этого массива портится. QByteArray ar = test.toByteArray(); Делает копию QBaytArray и она уже никуда не девается и указатель на char* верен, пока не вышли за пределы существования массива. Тролли часто предупреждают о подобных граблях. Читайте не только описания функций, но и статьи про устройство самих классов.
А меня вот это удивило. Это же потеря памяти! Или я по весне ничего не понимаю уже? Сообщение отредактировал Анна - 24.3.2010, 17:56 |
|
|
Текстовая версия | Сейчас: 20.12.2024, 13:56 |