来看下面一个例子:
#include <QtGui/QApplication>
#include <QString>
#include <stdio.h>
int main(int argc, char *argv[])
{
QString m("china");
QString n("great");
const char *mstr = m.toStdString().data();
printf("mstr = %s\n", mstr);
const char *nstr = n.toStdString().data();
printf("nstr = %s\n", nstr);
return 0;
}
输出结果显而易见:
mstr = china
nstr = great
但如果我这样写:
#include <QtGui/QApplication>
#include <QString>
#include <stdio.h>
int main(int argc, char *argv[])
{
QString m("china");
QString n("great");
const char *mstr = m.toStdString().data();
const char *nstr = n.toStdString().data();
printf("mstr = %s\n", mstr);
printf("nstr = %s\n", nstr);
return 0;
}
答案应该是不变的,可偏偏不是这样,答案是:
mstr = great
nstr = great
我在做毕设的时候遇到字符串输出乱码的问题就是这里搞的鬼,一开始还不相信,后来就写了这么个小程序试了一下,果真有问题。不知道Qt中这个toStdString().data()是怎么实现的,以后得注意了,得照着前面那种方式写。
本文通过两个简单的Qt程序对比,揭示了使用QString与std::string相互转换时可能遇到的一个陷阱。当按照特定顺序调用toStdString().data()时,输出结果符合预期;但若顺序不当,则会导致意料之外的结果。此问题在进行毕业设计时曾引发字符串输出乱码,值得开发者注意。
1381

被折叠的 条评论
为什么被折叠?



