テキストブロックを検索するために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() を使用する場合)...設計またはバグ。元の文字列は大きくなる可能性があります。300文字近く見たことがあります...これは問題ですか?