如何在 Visual Studio 2013 中将 Qt5 中的 QString 转换为 LPCSTR



我发现了这个(在我的情况下没用)的问题:如何将QString转换为LPCSTR(Unicode),你们中的大多数人可能会认为这是重复的,但我认为它要么与不同的Qt/VS/C++版本有关,要么只是没有正确的答案(尽管有些被标记为如此)。

我在Windows 7上的Visual Studio 2013中使用Qt5编写了以下代码,使用C++11标准,它使用链接答案中的所有建议解决方案:

QString test = "hello world";
// 1
LPCSTR lp1 = _T(test.toLocal8Bit().constData());
// 2
LPCSTR lp2 = _T(test.toUtf8().toStdString().c_str());
// 3
LPCSTR lp3 = _T(test.toLatin1().toStdString().c_str());
  1. 生产

    îþîþîþ'Û)ÆS2¹ú ̈ºú

  2. 生产

    îþîþîþfþš

  3. 生产

    îþîþîþfþš

如何转换它?

感谢HuntsMan @irc.freenode.net 我找到了正确的解决方案:

QString test = "hello world";
QByteArray test_ar = test.toLocal8Bit();
LPCSTR lp2 = _T(test_ar.constData());

问题是,一旦我退出该行代码,QByteArray 的副本就会从堆栈中删除,因此我作为 LPCSTR 传递的指针指向已删除的内存。

最新更新