2016-07-10 23 views
-2

enter image description hereC++のstd ::文字列「==」演算子と方法を比較

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 

等しい文字列に等しくない値を返している私は、STDを理解カント:: wcscmpのために異なる結果を持っている理由の文字列は、関数を比較します。

なぜこれらの結果が異なるのか分かりますか? 長さが違うのですか?

+0

あなたのコードのいくつかの部分は、あなたの 'std :: string'に*ヌルターミネーター*(' '\ 0' ')を追加しているようですが、' std :: string'は(意味的に)終わり*。 – Galik

答えて

5

これらは等しくないためです。添付した画像の文字列のサイズを確認してください。最初に文字列の末尾に'\0'があります。それも文字です。

+0

平均はstd :: stringのメソッドを比較してサイズを確認していますか?または等しいのではない理由は、2番目の文字列はnullのchracterで終わっていないですか? – rain0

+0

@Bo Perssonの返信を確認してください。 – Jepessen

0

標準演算子==はlhs.compare(rhs) == 0を返します。

3

wcscmpヒット数がL'\0'のときに比較が停止します。 std::wstringは、文字列のsize()を検討します。

ストリング==compareは、第戻りtrueと同じ文字列の第二戻り0として「異なる」結果を返します。 Differences between C++ string == and compare()?

関連する問題