crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> 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.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.3.2010, 19:05
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


что-то я до конца не понял, в чём собственно вопрос.
Как преобразовать QString в char или же наоборот.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
greh
  опции профиля:
сообщение 6.3.2010, 19:13
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 23.11.2009
Пользователь №: 1252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Qstring в char
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.3.2010, 19:57
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Хм, повторил код, результат для меня не ожиданный. Изменил его так:
Было:
char* sometext=test.toAscii().data();

стало:
QByteArray ar = test.toAscii();
char* sometext=ar.data();
всё стало путём.

Надо будет об этом подумать, но потом:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
greh
  опции профиля:
сообщение 6.3.2010, 20:54
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 23.11.2009
Пользователь №: 1252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 6.3.2010, 21:57) *
Хм, повторил код, результат для меня не ожиданный. Изменил его так:
Было:
char* sometext=test.toAscii().data();

стало:
QByteArray ar = test.toAscii();
char* sometext=ar.data();
всё стало путём.

Надо будет об этом подумать, но потом:)

Спасибо! Заработало!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 6.3.2010, 22:52
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Litkevich Yuriy @ 6.3.2010, 19:57) *
Надо будет об этом подумать, но потом:)

Все уже было обдумано на prog.org. :)
Нельзя сохранять указатель на временный объект.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.3.2010, 23:55
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Точно также как с следующим кодом:


QString test_string("My name is Alexander.");
const char* result = test_string.toStdString().c_str();

// Result will be next: empty string: result = ""


// But this code
QString test_string("My name is Alexander.");
std::string temp(test_string.toStdString());
conts char* result = temp.c_str();

// Result will be expected: result = "My name is Alexander."

Вот так вот.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_nixm_*
сообщение 8.3.2010, 18:21
Сообщение #8





Гости








    


Цитата(Litkevich Yuriy @ 6.3.2010, 19:57) *
Хм, повторил код, результат для меня не ожиданный. Изменил его так:
Было:
char* sometext=test.toAscii().data();

стало:
QByteArray ar = test.toAscii();
char* sometext=ar.data();
всё стало путём.

Надо будет об этом подумать, но потом:)


Лучьше
QByteArray ar = test.toByteArray();
char* sometext=ar.data();


Так кодировка символов сохраниться
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 8.3.2010, 20:06
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Гость_nixm_* @ 8.3.2010, 18:21) *
Лучьше


У QString нет метода toByteArray. У QVariant - да, но речи о нем тут не шло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 24.3.2010, 17:31
Сообщение #10


Активный участник
***

Группа: Участник
Сообщений: 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* верен, пока не вышли за пределы существования массива. Тролли часто предупреждают о подобных граблях. Читайте не только описания функций, но и статьи про устройство самих классов.



 char* value=new char[100];
....
  value=sometext;

А меня вот это удивило. Это же потеря памяти! Или я по весне ничего не понимаю уже?

Сообщение отредактировал Анна - 24.3.2010, 17:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.12.2024, 22:41