QT: QString to char*
От: HunteX http://troyashka.ru/
Дата: 10.04.11 09:51
Оценка:
Привет! Помогите перевести строку типа QString в char*

Делаю таким образом:

QString *qs = new QString("переведи меня в чары! :)");
QByteArray qb = qs->toUtf8();
char *ch = qb.data();
Re: QT: QString to char*
От: Shellac  
Дата: 10.04.11 09:58
Оценка: 3 (1) -2
Здравствуйте, HunteX, Вы писали:

HX>Привет! Помогите перевести строку типа QString в char*


HX>Делаю таким образом:


HX>
HX>QString *qs = new QString("переведи меня в чары! :)");
HX>QByteArray qb = qs->toUtf8();
HX>char *ch = qb.data();
HX>


QString test;
char* ctest = test.toAscii().data();
Re[2]: QT: QString to char*
От: HunteX http://troyashka.ru/
Дата: 10.04.11 10:09
Оценка:
Здравствуйте, Shellac, Вы писали:

S>Здравствуйте, HunteX, Вы писали:


HX>>Привет! Помогите перевести строку типа QString в char*


HX>>Делаю таким образом:


HX>>
HX>>QString *qs = new QString("переведи меня в чары! :)");
HX>>QByteArray qb = qs->toUtf8();
HX>>char *ch = qb.data();
HX>>


S>
S>QString test;
S>char* ctest = test.toAscii().data();
S>


Спасибо! Минутой ранее реализовал вот так:

qs.toLocal8Bit().data()
Re[3]: QT: QString to char*
От: Shellac  
Дата: 10.04.11 13:17
Оценка: +1 :)
Здравствуйте, HunteX, Вы писали:

HX>Спасибо! Минутой ранее реализовал вот так:


Для спасибо есть кнопка специальная
Re[4]: QT: QString to char*
От: Ops Россия  
Дата: 10.04.11 14:52
Оценка:
Здравствуйте, Shellac, Вы писали:

S>Здравствуйте, HunteX, Вы писали:


HX>>Спасибо! Минутой ранее реализовал вот так:


S>Для спасибо есть кнопка специальная

Эта кнопка для кого-то актуальна?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: QT: QString to char*
От: dikarrus  
Дата: 10.04.11 21:14
Оценка:
HX>QString *qs = new QString("переведи меня в чары! :)");
HX>QByteArray qb = qs->toUtf8();
HX>char *ch = qb.data();


На Qt 3.3.3 вот такое работает:
QString *qs = new QString("переведи меня в чары! :)");
char *ch = qs.data();
Re[2]: QT: QString to char*
От: K13 http://akvis.com
Дата: 11.04.11 05:22
Оценка: +2
Здравствуйте, Shellac, Вы писали:

S>
S>QString test;
S>char* ctest = test.toAscii().data();
S>


Очень рискованно, особенно если прокинуть ctest как параметр в какую-нибудь функцию.
Потому что указатель торчит в уже освобожденную память временного объекта QByteArray.

UB в чистом виде.

Кодировка зависит от обстановки: .toAscii() / .toLocal8Bit() / .toUtf8()

Но результирующий QByteArray нужно либо копировать в локальный объект либо держать по константной ссылке.
Re: QT: QString to char*
От: sc Россия  
Дата: 11.04.11 05:59
Оценка:
Здравствуйте, HunteX, Вы писали:

HX>Привет! Помогите перевести строку типа QString в char*


HX>Делаю таким образом:


HX>
HX>QString *qs = new QString("переведи меня в чары! :)");
HX>QByteArray qb = qs->toUtf8();
HX>char *ch = qb.data();
HX>


так
QString *qs = new QString("переведи меня в чары! :)");
QByteArray qb = qs->toLocal8Bit();
char *ch = qb.data();

или так
QString *qs = new QString("переведи меня в чары! :)");
char const* ch = qs->toLocal8Bit().constData();

иначе кодировка может подпортится
Re[3]: QT: QString to char*
От: jyuyjiyuijyu  
Дата: 11.04.11 06:45
Оценка:
Здравствуйте, K13, Вы писали:

K13>Здравствуйте, Shellac, Вы писали:


S>>
S>>QString test;
S>>char* ctest = test.toAscii().data();
S>>


K13>Очень рискованно, особенно если прокинуть ctest как параметр в какую-нибудь функцию.

K13>Потому что указатель торчит в уже освобожденную память временного объекта QByteArray.

K13>UB в чистом виде.

void f(char*){}

QString test;
f(test.toAscii().data());

гарантируется же что временный QByteArray не сдохнет пока мы не выйдем из вызванной функции ?
Re[3]: QT: QString to char*
От: jyuyjiyuijyu  
Дата: 11.04.11 07:30
Оценка:
Здравствуйте, K13, Вы писали:

и если гарантируется то почему нельзя? взять неконстантную ссылку вот так
void f(QByteArray&){}

QString test;
f(test.toAscii());

получается он что так что так живет пока мы не выйдем из функции зачем было запрещать неконстантную ссылку ?
или можно ?
понимаю в таком контексте опасно неконстантную ссылку брать
хотя для студии все будет гуд
string f()
{
    return "qwerty";
}

int main()
{
    string &r = f();
    PCCH str = r.c_str();
    puts(str);
}

но вот при вызове то функции зачем запрещать
неконстантную ссылку объект же живет до возвращения ?
что в этом коде плохого если гарантируется что объект сдохнет только по возвращении
void f(QByteArray&){}

QString test;
f(test.toAscii());

но говорят нельзя или дезинформируют ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.