一个容易的获取本地ip的函数

一个简单的获取本地ip的函数
最近在与学生聊关于socket编程时,一个学生问如何获得本地IP,于是我写了一个小函数,分享给刚刚接触socket编程的朋友~
我用的是vs2005
#include <winsock2.h>
char* GetHostIP(void){
char cHost[256];

gethostname(cHost,256);

hostent *pHost = gethostbyname(cHost);
in_addr addr;

char *p = pHost->h_addr_list[0];
memcpy(&addr.S_un.S_addr,p,pHost->h_length);

return inet_ntoa(addr);
}

如果遇到找不到库的问题,可以按照下列步骤进行配置:
项目属性->连接器->输入->附加依赖项->添加ws2_32.lib->应用->确定->解决方案右键->清理解决方案->重新生成解决方案。
小小函数,希望能给初学者带来些许帮助!

------解决方案--------------------

char* GetHostIP(void)
{
int ret;
char cHost[256];

ret = gethostname(cHost,256);
if (ret != 0)
{
ret = GetLastError();
return NULL;
}

hostent *pHost = gethostbyname(cHost);
in_addr addr;

char *p = pHost->h_addr_list[0];
memcpy(&addr.S_un.S_addr,p,pHost->h_length);

return inet_ntoa(addr);
}

int main(int argc, char **argv)
{
char *ip = NULL;
WSADATA wsaData;

WSAStartup(MAKEWORD(2, 2), &wsaData);

printf("%s\n", (ip = GetHostIP()) ? ip : "faild");

WSACleanup();
return 0;
}

最好加上出错处理吧, 不然程序很容易崩掉的。
------解决方案--------------------
这种情况适用于内网,如果一台电脑既有内网又有外网IP,外网IP就查不到了