Я пытаюсь создать анализатор XML на С++. В настоящее время я использую cygwin и gcc для компиляции и gdb для отладки. У меня есть этот кусок кода:
const size_t mDataSize = mData.size();
...
size_t ltPos = mData.find_first_of('<', pos);
if (ltPos==mData.npos) {
...
mData объявляется как private const std::string внутри класса и содержит содержимое XML-файла. После отладки с помощью gdb я обнаружил следующее:
(gdb) print pos
$12 = 636
(gdb) print mDataSize
$13 = 2692
(gdb) n
141 size_t ltPos = mData.find_first_of('<', pos);
(gdb) print ltPos
$14 = 114
(gdb) print pos
$15 = 636
(gdb) n
143 if (ltPos==mData.npos)
(gdb) print ltPos
$16 = 4294967295
(gdb) print mData[636]
$17 = (const char &) @0xb2b2a8: 10 '\n'
(gdb) print mData[637]
$18 = (const char &) @0xb2b2a9: 32 ' '
(gdb) print mData[638]
$19 = (const char &) @0xb2b2aa: 32 ' '
(gdb) print mData[639]
$20 = (const char &) @0xb2b2ab: 60 '<'
Я ожидал 639 в результате вызова find_first_of, но я получаю 4294967295 (что равно -1 в 32-битном целом со знаком и соответствует std::string::npos). Может ли кто-нибудь оправдать такое поведение? Или подскажите как это обойти?
find
, если ищете один символ.find_first_of
предназначен для поиска любого из заданного набора символов. Никакой разницы, но, думаю, легче читать и рассуждать. - person Kerrek SB   schedule 08.10.2011find
будет более очевидным кандидатом для использования, чемfind_first_of
. - person Bo Persson   schedule 08.10.2011ltpos
равно 636 в строке 141, а затем -1 в строке 143. Есть ли код в строке 142? Является ли строка 141 циклом или другой конструкцией? - person Carlos   schedule 10.10.2011