std :: string :: find_first_of не возвращает ожидаемое значение - PullRequest
1 голос
/ 08 октября 2011

Я пытаюсь создать парсер XML на C ++.В настоящее время я использую Cygwin и GCC для компиляции и GDB для отладки.У меня есть этот кусок кода:

const size_t mDataSize = mData.size();  
...  
size_t ltPos = mData.find_first_of('<', pos);  
if (ltPos==mData.npos) {  
...  

mData объявлен как частный 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-битном int со знаком и соответствует std ::строка :: НСС).Может ли кто-нибудь оправдать такое поведение?Или подскажите, как обойти это?

1 Ответ

0 голосов
/ 10 октября 2011

Значит, mData объявлена ​​как ссылка? Если это так, он на самом деле не содержит контент, он содержит ссылку на контент. То, на что ссылается mData, все еще существует в тот момент, когда вы вызываете find_first_of?

...