2016-04-07 6 views
1

Ich benutze Qt Creator, um eine C++ - Anwendung und den Debugger zu entwickeln, um den Code zu untersuchen, ich versuche einige sehr seltsame Ergebnisse zu verstehen, die vom Debugger gemeldet werden.Qt5.5 QString indexOf ungerade Ergebnis

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)); 
     } 

Ich habe einen Haltepunkt auf der Linie:

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

Im Codeausschnitt oben strProcessed enthält:

"1079-[height]" 

Wenn der Haltepunkt erreicht wird, intClB enthält 1 und intOpB enthält 6 .

intOpB ist korrekt, da der zurückgegebene Wert von indexOf 5 ist und dann inkremiert wird Eingegeben vor der Suche nach "]", aber intClB ist nicht korrekt, warum meldet der Debugger es als 1? Das ergibt für mich keinen Sinn.

Ich verwende:

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 

Wie king_nak entdeckt, sollte der korrigierte Code lesen:

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

Diese Werte sind nur im Debugger? Was passiert beim Drucken der Werte? –

+0

Ja, dies sind die vom Debugger gemeldeten Werte. Ich werde jetzt versuchen, zu drucken. – SPlatten

Antwort

2

Sie verlegt haben eine Klammer:

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

Dies weist das Ergebnis von strProcessed.indexOf("]", ++intOpB) >= 0 bis intClB, interpretiert als int. Wie diese Aussage ist true, intClB = 1.

Sie wollen:

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

Gut entdeckt :) – SPlatten