QString для обугливания* преобразование

Я пытался преобразовать QString для обугливания* тип следующими методами, но они, кажется, не работают.

//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());

Можно ли разработать возможный дефект с этим методом или дать ли альтернативный метод?

83
задан lpapp 16 December 2014 в 06:42
поделиться

4 ответа

Что ж, 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();
}

Так что, возможно, у вас другие проблемы. Как именно это не работает?

109
ответ дан 24 November 2019 в 08:47
поделиться

Строка может содержать символы, не являющиеся латинскими1, что приводит к неопределенным данным. Это зависит от того, что вы подразумеваете под «кажется, что это не работает».

3
ответ дан 24 November 2019 в 08:47
поделиться

Может быть

my_qstring.toStdString().c_str();

или безопаснее, как указывает Федерико:

std::string str = my_qstring.toStdString();
const char* p = str.c_str();

Это далеко не оптимально, но выполнит работу.

45
ответ дан 24 November 2019 в 08:47
поделиться

Ответ Дэвида работает нормально, если вы используете его только для вывода в файл или отображения на экране, но если для функции или библиотеки требуется символ * для синтаксического анализа, то этот метод работает лучше всего. :

// 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);
6
ответ дан 24 November 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: