怎么获取协议号号???

lovesick 2008-01-02 11:18:50
//pprotoent是protoent结构的指针
在pprotoent=getprotobynae();成功返回后,去获取协议号怎么失败CString str;
char number[10];
sprintf(number,"%s",pprotoent->p_proto);//这句未处理的异常: 0xC0000005: 读取位置 0x00000008 时发生访问冲突

str.Format("%s",number);
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldmanzhao 2008-01-03
  • 打赏
  • 举报
回复
但是你给的代码是if(pprotoent) MessageBox("失败") else 作处理。
你这样做把if块和else块的内容弄反了。
lovesick 2008-01-03
  • 打赏
  • 举报
回复
你说的那里没错,如果没发生错误getprotobyname的返回值为protoent的结构指针
如果错误,返回空指针!!!
lovesick 2008-01-03
  • 打赏
  • 举报
回复
pprotoent=getprotobyname(pProtocolBuf->szProtocol);
不好意思,漏了!!!
oldmanzhao 2008-01-02
  • 打赏
  • 举报
回复
你应该这样sprintf(number,"%d",pprotoent->p_proto);
oldmanzhao 2008-01-02
  • 打赏
  • 举报
回复
p_proto不是一个short型吗,又不是字符串。
oldmanzhao 2008-01-02
  • 打赏
  • 举报
回复
if (pprotoent)改成 if(!pprotoent)看看。
再说你上面的这个函数里,pprotoent是在哪里获得的?
lovesick 2008-01-02
  • 打赏
  • 举报
回复
void CSetupProtocolDlg::PrintProtocol(LPWSAPROTOCOL_INFO pProtocolBuf)
{
CString str;
str.Format("%s",pProtocolBuf->szProtocol);
m_getsp.AddString(str);
if(pprotoent)
{
MessageBox("获取协议名的包含名字和协议号失败!!!");
}
else
{
CString str;
str.Format("%s",pprotoent->p_name);//出现错误的地方
char number[10];
sprintf(number,"%d",pprotoent->p_proto);//出现错误
str.Format("%d",number);
m_getsp.AddString(str);
/*CString str;
str.Format("%s",pprotoent->p_name);//出现错误
m_getsp.AddString(str);*/
}

}
oldmanzhao 2008-01-02
  • 打赏
  • 举报
回复
那你看看你的pprotoent是不是正确。
jwybobo2007 2008-01-02
  • 打赏
  • 举报
回复
内存溢出,一般是你的数据指针错误
lovesick 2008-01-02
  • 打赏
  • 举报
回复
不是那个问题!!!改了还是一样的错误!!!

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧