我在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。
任何想法,我失踪的地方?
答案 0 :(得分:2)
关键点是CPDNList :: Find()的MSDN帮助中的一行:“请注意,比较指针值,而不是对象的内容。”
当你的代码调用“new CString(sTemp)”时,会创建一个新的CString对象,并返回(并添加到CPtrList)的是指针值 - 新CString的内存中的位置。比方说,例如,这是在内存位置0x001234500。
调用Find()的代码传入字符缓冲区的地址,但是,即使它包含与上面CString相同的字符串字符,它在内存中的位置也会完全不同。由于您没有传入0x0012234500(在此示例中),因此找不到您期望的条目。
考虑到你想要做的事情,CPtrList可能不是合适的容器类型 - 像CStringList这样的东西会更合适,因为比较是通过值(即字符串的内容)而不是通过指针来完成的。 / p>
如果所有这些都没有意义,我担心你需要花一些时间阅读指针,以及诸如相等(两个具有相同值的不同对象)和身份(不同)之间的差异等概念引用同一个对象)