Qt5.5 QString indexOf 奇数结果
Qt5.5 QString indexOf odd result
我正在使用 Qt Creator 开发 C++ 应用程序和调试器来检查代码,我试图了解调试器报告的一些非常奇怪的结果。
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,然后在搜索“]”之前递增,但 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));
}
}
您放错了大括号:
(intClB = strProcessed.indexOf("]", ++intOpB) >= 0)
这会将 strProcessed.indexOf("]", ++intOpB) >= 0
的结果赋值给 intClB
,解释为 int
。因为这个语句是true
, intClB = 1
.
你想要:
(intClB = strProcessed.indexOf("]", ++intOpB) ) >= 0
^ Brace here
我正在使用 Qt Creator 开发 C++ 应用程序和调试器来检查代码,我试图了解调试器报告的一些非常奇怪的结果。
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,然后在搜索“]”之前递增,但 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));
}
}
您放错了大括号:
(intClB = strProcessed.indexOf("]", ++intOpB) >= 0)
这会将 strProcessed.indexOf("]", ++intOpB) >= 0
的结果赋值给 intClB
,解释为 int
。因为这个语句是true
, intClB = 1
.
你想要:
(intClB = strProcessed.indexOf("]", ++intOpB) ) >= 0
^ Brace here