Преобразование QString в char *
Я пытался преобразовать QString в тип char * следующими способами, но они, похоже, не работают.
//QLineEdit *line=new QLineEdit();{just to describe what is line here}
QString temp=line->text();
char *str=(char *)malloc(10);
QByteArray ba=temp.toLatin1();
strcpy(str,ba.data());
Можете ли вы объяснить возможный недостаток этого метода или дать альтернативный метод?
Ответы
Ответ 1
Ну, Qt FAQ говорит:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QString str1 = "Test";
QByteArray ba = str1.toLocal8Bit();
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
return app.exec();
}
Так что, возможно, у вас есть другие проблемы. Как именно это не работает?
Ответ 2
Возможно
my_qstring.toStdString().c_str();
или безопаснее, как указывает Федерико:
std::string str = my_qstring.toStdString();
const char* p = str.c_str();
Это далеко не оптимально, но будет работать.
Ответ 3
Самый простой способ преобразования QString в char * - qPrintable (const QString & str),
который является макросом, расширяющимся до str.toLocal8Bit().constData()
.
Ответ 4
Ответ Дэвида отлично работает, если вы используете его только для вывода в файл или отображения на экране, но если функция или библиотека требует char * для синтаксического анализа, то этот метод работает лучше всего:
// copy QString to char*
QString filename = "C:\dev\file.xml";
char* cstr;
string fname = filename.toStdString();
cstr = new char [fname.size()+1];
strcpy( cstr, fname.c_str() );
// function that requires a char* parameter
parseXML(cstr);
Ответ 5
Ваша строка может содержать символы не Latin1, что приводит к undefined данным. Это зависит от того, что вы подразумеваете под "это, похоже, не работает".
Ответ 6
Правильное решение Было бы так:
QString k;
k = "CRAZYYYQT";
char ab[16];
sprintf(ab,"%s",(const char *)((QByteArray)(k.toLatin1()).data()) );
sprintf(ab,"%s",(const char *)((QByteArray)(k.toStdString()).data()));
sprintf(ab,"%s",(const char *)k.toStdString().c_str() );
qDebug()<<"--->"<<ab<<"<---";
Ответ 7
РЕДАКТИРОВАНИЕ
этот способ также работает
QString str ("Something");
char* ch = str.toStdString().C_str();
Ответ 8
Если ваша строка содержит символы не ASCII - лучше сделать это следующим образом: s.toUtf8().data()
(или s->toUtf8().data()
)