【问题标题】:Qt and std::stringQt 和 std::string
【发布时间】:2012-10-14 08:45:58
【问题描述】:

我有一个奇怪的问题。当我通过 Qt 文件对话框打开文件时,我的工具运行正常。 但是,当我在 VS 2010 中将其他库中的 dll 绑定到我的项目中时,当我打开文件时该工具会崩溃。通过调试我发现它发生在基本字符串的析构函数中。 以下行导致问题:

std::string inputFilename = aFilenames.at(i).toStdString();

其中aFilenames 是一个QStringList。如果我写:

std::string inputFilename = "C:\\test.txt";

然后就可以了。那么 std::string 出了什么问题,为什么当我将另一个库中的 dll 绑定到我的项目中时会发生这种情况?

【问题讨论】:

  • 您确定您在位置i 的特定字符串存在吗?你没有在向量/数组之外的地方阅读?
  • 我无法重现该问题,您需要提供更多信息。
  • 是的,我确信我没有越界。我可以在调试器中看到它。无论如何,如果我不绑定 dll,它可以工作......当我绑定 dll(第三方库)时,问题就出现了。但是我的第一个陈述和第二个陈述有什么区别?它们都是 std::strings...
  • 另一个建议,将字符串转换为 C 字符串(以 \0 结尾的字符数组),然后将 C 字符串转换为 std::string(假设您的文件名没有任何非 ASCII 字符) .
  • @ISTB 很难在没有看到中间值(调试输出,我的意思是)的情况下问问题是什么。这可能是与当前默认编码相关的一些深奥的字符编码问题,无论是在 Qt 还是在 STL 端。

标签: qt stdstring


【解决方案1】:

试试这个:

string(aFilenames.at(i).toLocal8Bit())

【讨论】:

  • 我不确定,但是我的windows程序自从使用以来,经过多次测试都没有问题。
  • QByteArray 是如何以const char[] 结尾的? 更新(这只是obvious,不是吗?)
猜你喜欢
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多