c – else语句似乎被忽略
发布时间:2020-12-16 05:35:07 所属栏目:百科 来源:网络整理
导读: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 { appPro
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |