2016-07-10 10 views
-2

enter image description hereC++ std :: string '==' Operator und Compare-Methode ist nicht gleich Wert gleich String zurück

motion->bone_frames[0].name == model->bones[0].bone_name//it return 0 . it should be 1 

motion->bone_frames[0].name.Compare(model->bones[0].bone_name)//it return 1 . it should be 0 

wcscmp(motion->bone_frames[0].name.c_str(), model->bones[0].bone_name.c_str()) //it return 0 it should be 0 correct 

Ich kann nicht verstehen, std :: string vergleichen Funktionen, warum verschiedene Ergebnis müssen wcscmp.

Kann ich wissen, warum diese Ergebnisse unterschiedlich sind? Ist es wegen der unterschiedlichen Länge?

+0

Es sieht so aus, als ob ein Teil Ihres Codes * null terminators * (''\ 0'') zu Ihrer' std :: string' hinzufügt, aber 'std :: string' ist nicht (semantisch) * null -terminiert *. – Galik

Antwort

5

Weil sie nicht gleich sind. Überprüfen Sie die Größe Ihrer Zeichenfolgen in dem angehängten Bild. In der ersten gibt es '\0' am Ende der Zeichenfolge, das sind auch Zeichen.

+0

das bedeutet, vergleichen Methode der Std :: String ist die Größe überprüfen? oder nur der Grund von nicht gleich ist zweite Zeichenfolge ist nicht mit null chrater ?? – rain0

+0

@Bo Persson Antwort überprüfen. – Jepessen

0

Der Standardoperator == gibt lhs.compare(rhs) == 0 zurück.

3

wcscmp stoppt den Vergleich, wenn es L'\0' erreicht. A std::wstring berücksichtigt die size() der Strings.

Der String == und compare zurückkehren wird „anders“ Ergebnisse als die ersten Erträge true und die zweite Rückkehr 0 für gleiche Saiten. Siehe Differences between C++ string == and compare()?

Verwandte Themen