0

CPtrList に CString 値を追加しました。そして、検索機能を使用します。CPtrList の Find メソッドを使用して CString 値を検索しようとすると、常に NULL 位置になります。

以下は、CPtrList ptrFolderPath に CString 値を追加するコードです。

CString sTemp;// 

ptrFolderPath.AddTail(new CString (sTemp));

検索中に以下のコードを使用します。

POSITION pos = ptrFolderPath.Find(sPath.GetBuffer(sPath.GetLength()));

ここで sPath は CString です。

ただし、pos 値は常に NULL です。

私が行方不明になっている場所はありますか?

4

1 に答える 1

3

重要なポイントは、CPtrList::Find() に関する MSDN ヘルプの行です。「オブジェクトの内容ではなく、ポインター値が比較されることに注意してください。」

コードが "new CString (sTemp)" を呼び出すと、新しい CString オブジェクトが作成され、返される (そして CPtrList に追加される) のはポインター値 (新しい CString のメモリ内の場所) です。たとえば、これがメモリ位置 0x001234500 にあるとします。

Find() を呼び出すコードは文字バッファーのアドレスを渡していますが、これに上記の CString と同じ文字列文字が含まれていても、メモリ内の場所は完全に異なります。(この例では) 0x0012234500 を渡していないため、期待するエントリが見つかりません。

あなたがやろうとしているように見えることを考えると、CPtrListはおそらく適切なコンテナタイプではありません.CStringListのようなものは、ポインタではなく値(つまり文字列の内容)によって比較が行われるため、より適しています。

これらすべてが理解できない場合は、ポインタや、等価性 (同じ値を持つ 2 つの異なるオブジェクト) と同一性 (オブジェクトへの異なる参照) の違いなどの概念について、時間をかけて読む必要があると思います。同じオブジェクト)

于 2013-10-29T10:09:12.463 に答える