Преобразование 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());
можете ли вы разработать возможный недостаток с помощью этого метода или дать альтернативный метод?
7 ответов:
Ну Qt FAQ говорит:
int main(int argc, char **argv) { QApplication app(argc, argv); QString str1 = "Test"; QByteArray ba = str1.toLatin1(); const char *c_str2 = ba.data(); printf("str2: %s", c_str2); return app.exec(); }Так что, возможно, у вас возникли другие проблемы. Как именно это не работает?
может быть
my_qstring.toStdString().c_str();или безопаснее, как указывает Федерико:
std::string str = my_qstring.toStdString(); const char* p = str.c_str();это далеко не оптимально, но будет делать свою работу.
самый простой способ конвертировать a QString до char* и qPrintable (const QString& str), который является макросом, расширяющимся до
str.toLocal8Bit().constData().
ответ Дэвида отлично работает, если вы используете его только для вывода в файл или отображения на экране, но если функция или библиотека требует 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);
ваша строка может содержать не Latin1 символов, что приводит к неопределенным данным. Это зависит от того, что вы подразумеваете под "это не похоже на работу".
правильное решение было бы так
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<<"<---";
редактировать
этот способ также работает
QString str ("Something"); char* ch = str.toStdString().C_str();
Comments