将QString转换为char*

woo*_*ody 22 c++ string qt qt4

可能重复:
QString到char转换

我有一个函数(在STL中fopen),它将char*参数作为我计算机中的路径,但我必须在那个地方使用QString,因此它不起作用.

如何将QString转换为char*来解决此问题?

小智 48

请参阅此处如何将QString转换为char*,反之亦然?

为了将QString转换为char*,您首先需要通过调用它上面的Latin1()来获取该字符串的latin1表示,这将返回一个QByteArray.然后在QByteArray上调用data()以获取指向存储在字节数组中的数据的指针.查看文档:

https://doc.qt.io/qt-5/qstring.html#toLatin1 https://doc.qt.io/qt-5/qbytearray.html#data

有关演示,请参阅以下示例:

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();
}
Run Code Online (Sandbox Code Playgroud)

请注意,在调用data()之前必须存储bytearray,如下所示

const char *c_str2 = str2.toLatin1().data();
Run Code Online (Sandbox Code Playgroud)

将导致应用程序崩溃,因为QByteArray尚未存储,因此不再存在

要将char*转换为QString,您可以使用带有QLatin1String的QString构造函数,例如:

QString string = QString(QLatin1String(c_str2)) ;
Run Code Online (Sandbox Code Playgroud)

查看文档:

https://doc.qt.io/qt-5/qlatin1string.html

当然,我发现之前的SO答案有另一种方法:

QString qs;

// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();

// or this if you on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();
Run Code Online (Sandbox Code Playgroud)

  • 我认为措辞需要改变.语句`const char*c_str2 = str2.toLatin1().data();`应该可以正常工作.不幸的是';'之后 由toLatin1()创建的临时QByteArray已被销毁,因此`c_str2`现在具有无效指针.相反,您可以在调用`doStuff(str2.toLatin1().data())中使用它;`因为QByteArray在';'之前不会被销毁 因此:`printf("str2:%s",str2.toLatin1().data());`应该没问题. (8认同)
  • 这个。我今天花了一半时间调试由底层 QByteArray 被破坏引起的问题。必须存储字节数组确实很痛苦,但这似乎是必要的。 (2认同)