Mit QString erhalten Sie seltsame Zeichen in der Ausgabe
Frage
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);
Das Problem ist, dass infos.stops angezeigt wurde, aber einige lustige Zeichen wie folgt aussehen:
Ich habe meinen gesamten Quellcode hochgeladen, der in QT Designer erstellt wurde http://uploading.com/files/eaddfaf8/bus.zip/ Die Problemzeile befindet sich in der Manager.cpp-Zeile 133.
Lösung
Versuchen Sie es mit
output = output + QString::fromStdString(*(infos.stops))+ "." ;
Andere Tipps
Ich glaube, ich habe es gelöst, nachdem ich Ihre Anwendung ein wenig getestet habe.Das folgende Codesegment sollte dies tun:
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>";
Beachten Sie, dass Sie den infos._numstops
des Mitglieds verfügbar haben und ihn verwenden sollten.Der if(a)
ist ein guter Trick, wenn Sie eine durch Kommas getrennte Liste ausgeben möchten.
(Ich habe Ihre Anwendung ausgeführt und festgestellt, dass die info
-Struktur nicht den Stopp enthält, an dem Sie Ihren Pfad beginnen, sondern den, an dem er endet. Sie sollten den Startstopp in die Ausgabe aufnehmen oder den Zielstopp ausschließenBeachten Sie außerdem, dass der +=
-Operator wie im if-body eine übliche Methode zum Anhängen von Zeichenfolgen ist.)
In manager.cpp: 103 rufen Sie DE1.cost (X, Y) auf.Diese Methode erstellt ein std :: string-Array (übergeben) auf dem Stapel (datzz.cpp: 432) und bei datzz.cpp: 502
c.stops = passed;
, das einen Zeiger auf einen auf dem Stapel zugewiesenen Speicherblock in der Stopps-Variablen Ihrer DatzEzy :: info-Instanz speichert. c.Wenn die Methodenkosten (Zeichenfolge, Zeichenfolge) zurückgegeben werden, wird der für die Übergabe zugewiesene Speicher freigegeben und Ihre Ausgabe ist Müll.Speichern Sie niemals Zeiger, um zugewiesene Objekte zu stapeln.
Übrigens sollten Sie beim Übergeben von (schreibgeschützten) Zeichenfolgen in Funktionsaufrufen die Verwendung von const-Referenzen in Betracht ziehen, um teures Kopieren zu vermeiden.