2016-04-07 2 views
1

Я использую Qt Creator для разработки приложения C++ и отладчика для изучения кода, я пытаюсь понять некоторые очень странные результаты, сообщаемые отладчиком.Qt5.5 QString indexOf нечетный результат

if (intDelimiter == -1 
     && (intOpB = strProcessed.indexOf("[")) >= 0 
     && (intClB = strProcessed.indexOf("]", ++intOpB) >= 0)) { 
     strRef = strProcessed.mid(intOpB, intClB - intOpB); 

     if (pobjNode != NULL) { 
      strProcessed.replace(strRef, pobjNode->strGetAttr(strRef)); 
     } 

У меня есть точки останова на линии:

strRef = strProcessed.mid(intOpB, intClB - intOpB); 

В фрагменте кода выше strProcessed содержит:

"1079-[height]" 

Когда точка останова, intClB содержит 1 и intOpB содержит 6

intOpB является правильным, потому что возвращаемое значение из indexOf равно 5, тогда его increm перед поиском «]», но intClB неверен, почему отладчик сообщает об этом как 1? Для меня это не имеет смысла.

Я использую:

Qt Creator 3.6.0 
    Based on Qt 5.5.1 (GCC 4.9.1 20140922 (Red Hat 4.9.1-10), 64bit) 
    Built On Dec 15 2015 01:01:12 
    Revision: b52c2f91f5 

Как разыскан king_nak, исправленный код следует читать:

if (intDelimiter == -1 
    && ((intOpB = strProcessed.indexOf("[")) >= 0 
    && (intClB = strProcessed.indexOf("]", ++intOpB)) >= 0)) { 
     strRef = strProcessed.mid(intOpB, intClB - intOpB); 

     if (pobjNode != NULL) { 
      strProcessed.replace(strRef, pobjNode->strGetAttr(strRef)); 
     } 
    } 
+0

Являются ли эти значения только в отладчике? Что происходит, когда вы печатаете значения? –

+0

Да, это значения, сообщенные отладчиком, сейчас я попробую выполнить печать. – SPlatten

ответ

2

Вы потеряли фигурную скобку:

(intClB = strProcessed.indexOf("]", ++intOpB) >= 0) 

Это присваивает результат от strProcessed.indexOf("]", ++intOpB) >= 0 до intClB, что интерпретируется как int. Как указано, true, intClB = 1.

Вы хотите:

(intClB = strProcessed.indexOf("]", ++intOpB)) >= 0 
              ^Brace here 
+0

Хорошо заметили :) – SPlatten

Смежные вопросы