以下代码为什么出错啊
char szHostName[128]={0};
gethostname(szHostName,128);
hostent* pHostent=gethostbyname(szHostName);
char *szIP=inet_ntoa(*(in_addr*)&pHostent->h_addr_list[2]);
m_ServerIP.SetWindowText(szIP);

解决方案 »

  1.   

    看看别人的
    CString GetLocalIp()
    {
        struct hostent* phost;
        char ip[20];
        char hostname[50];    gethostname(hostname,50);
        phost = gethostbyname(hostname);
        char ** names;
        names = phost->h_aliases;
        char ** iplist;
        iplist = phost->h_addr_list;
        while( * iplist)
        {
            strcpy(ip,inet_ntoa( * (struct in_addr * ) * iplist));
            iplist ++;
        }
        CString LocalIp = ip;
        return LocalIp;
    }
      

  2.   

    1、检查gethostname返回值
    2、看szHostName[128]是否会溢出
    3、确定h_addr_list数组有那么多个元素(3个),索引是否合法,szIP是否获取成功
      

  3.   

    1.楼主要说清楚点,出什么错?
    2.
    //之前调用WSAStartup初始化套接字库没有?
    char szHostName[128]={0};
    gethostname(szHostName,128);
    hostent* pHostent=gethostbyname(szHostName);
    char *szIP=inet_ntoa(*(in_addr*)&pHostent->h_addr_list[2]);  //溢出没有
    m_ServerIP.SetWindowText(szIP);
      

  4.   

    谢谢 我就是忘记初始化了  h_ddr_list[2]溢出了