【问题标题】:In CPtrList, Find member is always returning NULL在 CPtrList 中,Find 成员总是返回 NULL
【发布时间】:2013-11-08 09:32:54
【问题描述】:

我在 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。

知道我在哪里失踪了吗?

【问题讨论】:

    标签: visual-c++ vector stl mfc atl


    【解决方案1】:

    关键点是 MSDN 帮助中 CPtrList::Find() 的一行:“注意,比较的是指针值,而不是对象的内容。”

    当您的代码调用“new CString (sTemp)”时,会创建一个新的 CString 对象,返回(并添加到 CPtrList)的是指针值 - 新 CString 在内存中的位置。例如,假设它位于内存位置 0x001234500。

    您调用 Find() 的代码是传入字符缓冲区的地址,但是,即使它包含与上述 CString 相同的字符串字符,它在内存中的位置也会完全不同。由于您没有传入 0x0012234500(在此示例中),因此您找不到所需的条目。

    鉴于您似乎正在尝试做的事情,CPtrList 可能不是合适的容器类型 - 像 CStringList 这样的东西会更合适,因为比较是按值(即字符串的内容)而不是指针完成的。

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

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多