c++ - 如何将 Qt5 中的 QString 转换为 Visual Studio 2013 中的 LPCSTR

标签 c++ qt c++11

我发现这个(对我来说没用)问题:How to convert QString to 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. 产生

    þîþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ讯,>

  2. 产生

  3. 产生

如何转换?

最佳答案

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

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

问题是,一旦我退出那行代码,QByteArray 的一个拷贝就从堆栈中删除了,所以我作为 LPCSTR 传递的指针指向已删除的内存。

关于c++ - 如何将 Qt5 中的 QString 转换为 Visual Studio 2013 中的 LPCSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28090577/

相关文章:

c++ - 为什么 auto 的初始值设定项是引用时不是引用?

c++ - 访问 2D valarrays 的列切片

c++ - 使用位掩码重构整数

C++ 错误没有匹配的调用函数

C++ 11 用户定义文字与 Microsoft Visual Studio 2013

c++ - CUDA 6.0 链接错误 : undefined reference to `__cudaUnregisterFatBinary'

项目之间的 Qt 依赖关系

c++ - 通过 TCP 将图像从 labVIEW 发送到 QT

c++ - Consexpr 与宏

c++ - 将 std::forward 用于非转发引用