首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5.5 QString indexOf奇数结果

Qt5.5 QString indexOf奇数结果
EN

Stack Overflow用户
提问于 2016-04-07 12:52:17
回答 1查看 93关注 0票数 1

我正在使用Qt开发一个C++应用程序,并使用调试器检查代码,我试图理解调试器报告的一些非常奇怪的结果。

代码语言:javascript
复制
    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));
        }

我在线路上有个断点:

代码语言:javascript
复制
    strRef = strProcessed.mid(intOpB, intClB - intOpB);

在上面的代码片段中,strProcessed包含:

代码语言:javascript
复制
    "1079-[height]"

当命中断点时,intClB包含1,intOpB包含6。

intOpB是正确的,因为从indexOf返回的值是5,然后它在搜索"]“之前递增,但是intClB是不正确的,为什么调试器报告它为1?这对我来说毫无意义。

我正在使用:

代码语言:javascript
复制
    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所发现的,更正后的代码应该是:

代码语言:javascript
复制
    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));
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-07 13:10:25

你把支撑放错了地方:

代码语言:javascript
复制
(intClB = strProcessed.indexOf("]", ++intOpB) >= 0)

这将strProcessed.indexOf("]", ++intOpB) >= 0的结果分配给intClB,解释为int。因为这个语句是trueintClB = 1

你想:

代码语言:javascript
复制
(intClB = strProcessed.indexOf("]", ++intOpB) ) >= 0
                                              ^ Brace here
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36476777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档