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 这样的东西会更合适,因为比较是按值(即字符串的内容)而不是指针完成的。

如果这一切都没有意义,恐怕您需要花一些时间阅读指针,以及诸如相等(具有相同值的两个不同对象)和标识(对同一个对象)

于 2013-10-29T10:09:12.463 回答