c – else语句似乎被忽略

void PacketRecord::determineAppProtocol()
{
    if (ipProtocol == IP_PROTO_UDP)
    {
        std::istringstream ss(udpData);

        std::string line;
        if (getline(ss,line) && (line.find("SIP/2.0") != std::string::npos))
        {
            appProtocol = APP_PROTO_SIP;
        }
        else
        {
            appProtocol == APP_PROTO_RTP;
        }
    }
    else
    {
        appProtocol = APP_PROTO_UNKNowN;
    }
}

如果内部if语句无法求值为true,那么我希望执行else块(appProtocol设置为APP_PROTO_RTP).但是,这不会发生.相反,似乎else语句被完全忽略.我不知道为什么会这样.

从gdb会话中可以看到,第一次if语句工作,appProtocol设置为APP_PROTO_SIP(如预期的那样).第二次通过,如果失败,而不是进入else并将appProtocol设置为APP_PROTO_RTP,则它完全返回功能,而不设置appProtocol. appProtocol保持设置为APP_PROTO_INVALID(它在PacketRecord ctor中初始化的值).

Breakpoint 1,PacketRecord::determineAppProtocol (this=0x805c6c8) at PacketRecord.cpp:156
156     if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158         std::istringstream ss(udpData);
(gdb) 
159         std::string line;
(gdb) 
160         if (getline(ss,line) && (line.find("SIP/2.0") != std::string::npos))
(gdb) 
162             appProtocol = APP_PROTO_SIP;
(gdb) 
167         }
(gdb) 
173 }
(gdb) continue 
Continuing.

Breakpoint 1,PacketRecord::determineAppProtocol (this=0x8065388) at PacketRecord.cpp:156
156     if (ipProtocol == IP_PROTO_UDP)
(gdb) step
158         std::istringstream ss(udpData);
(gdb) 
159         std::string line;
(gdb) 
160         if (getline(ss,line) && (line.find("SIP/2.0") != std::string::npos))
(gdb) 
167         }
(gdb) 
173 }
(gdb)

解决方法

你应该更换
appProtocol == APP_PROTO_RTP;

通过

appProtocol = APP_PROTO_RTP;

(无双等号)

执行else语句.但是您没有将值分配给appProtocol.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...