使用QString在输出中获取奇怪的字符

时间:2011-01-30 15:46:30

标签: c++ qt qstring

int a=0;
while (a<2)
{
    //infos.stops is point to one array, called abc[10]

    output = output + QString::fromStdString(*infos.stops)+ "." ;

    infos.stops++;
    a++;
}
ui->showMsg->setText(output);

问题是infos.stops确实显示,但一些有趣的字符显示如下:

enter image description here

我已经上传了我在QT Designer中设计的所有源代码 http://uploading.com/files/eaddfaf8/bus.zip/ 问题在于manager.cpp第133行。

3 个答案:

答案 0 :(得分:3)

尝试使用 output = output + QString::fromStdString(*(infos.stops))+ "." ;

答案 1 :(得分:1)

我想我在对您的应用程序进行了一些测试后解决了这个问题。以下代码段执行此操作:

          output = output+ "Stops travelled: ";
          for(int a = 0; a < infos._numstops; ++a)
          {
              if(a)
                  output += ", ";
              output = output + QString::fromStdString(infos.stops[a]);
          }
          output = output + "<br>";

请注意,您可以使用infos._numstops成员,并且应该使用它。如果要输出以逗号分隔的列表,if(a)是一个很好的技巧。

(我运行了你的应用程序并注意到info结构不包括你开始路径的停止,而是它结束的停止。你应该在输出中包含起始停止或排除目标停止。请注意,if-body中的+=运算符是追加字符串的常用方法。)

答案 2 :(得分:0)

在manager.cpp:103中,您正在调用DE1.cost(X,Y)。此方法在堆栈(datzz.cpp:432)和datzz.cpp:502上创建std :: string数组(已传递)

c.stops = passed;

在DatzEzy :: info实例c的stops变量中存储指向堆栈上分配的内存块的指针。当方法cost(string,string)返回时,为pass传递的内存被释放,输出将是垃圾。永远不要存储指向堆栈分配对象的指针。

顺便说一下,在函数调用中传递(只读)字符串时应考虑使用const引用,这样可以避免昂贵的复制。