我正在使用 CString 搜索文本块...这是我的代码:
// locate file name in dir listing
in = *buf;
i = in.Find("DOWNLD .DAT ");// find start of name, two spaces (0x20) as delim
// size of search text here is 14
if (i == -1) return 0;
j = in.Find(' ',i);// now find next space char *after* file size...
// why don't I have to add to i here? There are spaces in my search string.
if (j == -1) return 0;
fileSize = in.Mid((i+14),j-i);// extract file size string, note indexing past found string
return atoi(fileSize.GetBuffer());
以下是 MSDN 关于 find 的返回值的说明:“返回值 CString 对象中与请求的子字符串或字符匹配的第一个字符的从零开始的索引;如果未找到子字符串或字符,则为 -1。”
现在我读这个的方式,我必须在做另一个查找之前索引我找到的字符串......但它实际工作的方式,我使用之前返回的'i'作为新搜索的开始位置。我在我的程序的其他地方使用它,我肯定必须索引它(例如,当使用 ::mid() 时)......我想知道为什么会发生这种情况,如果设计或漏洞。原始字符串可以很大;我已经在 300chars 附近看到它了……这是问题所在吗?