下面是个得到本机的计算机名,但奇怪的事情终于发现了........请各位参加,UP都有分! memset(hostname,0, sizeof(char) * MAX_PATH) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 兄弟又开始出错落?memset(hostname,0, MAX_PATH)你MAX_PATH是怎么定义的? memset(hostname,0.MAX_PATH);这条语句应该也必须要的,它只是初始化这块内存.至于你说的错误,我想八成不是它引起的.你自己再查查. WSAStartup(...) 在程序初始化的地方调用了吗?要不用它试试 gethostbyname(...) memset(hostname,0.MAX_PATH);//如果这句被注释掉的话肯定就是正确的,但如果加上它,在使用了gethostname后,hostname为空值,这是为什么???不信你们大家自己使用一下........小弟迷惑还有人知道吗? gethostname 這個函數的name length 是由要求的.由於這個函數從Unix上沿用下來的.股name length要求不小於25.請檢查 我的代码 checked by vc.net///////////////////////////////////////////////// char hostname[MAX_PATH]; memset(hostname,0,MAX_PATH); if (gethostname(hostname,MAX_PATH) == SOCKET_ERROR) { MessageBox(NULL,"得本机名错误!","发生错误!",MB_OK); //return; } AfxMessageBox((CString)hostname); TRACE(_T("hostname %s\n"), hostname);//////////////////////////////////////////////////hostname 肯定是取出来的了。好像主要的区别就是0.MAX_PATH0,MAX_PATH . ,不知道您是怎么通过编译的。 error C2859: d:\vcstu\getip\debug\vc60.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header.Error executing cl.exe.是这种错误吗? 如果是:请讲编译目录(Debug, Release)下的文件全删掉重新编译。memset(hostname,0.MAX_PATH); 上面0后的点号是你故意写的还是不小心,应该用","的,"."永远错误.我在我自己的机子上试验,是对的请参考:void CGetIPDlg::OnQuary() { // TODO: Add your control notification handler code here char szHostName[MAX_PATH]; memset(szHostName,0,MAX_PATH);////char szT[20]; if(gethostname(szHostName,128)==0) { m_HostName.SetWindowText(szHostName); struct hostent *pHost; int i; pHost=gethostbyname(szHostName); for(i=0; pHost!=NULL&&pHost->h_addr_list[i]!=NULL; i++) {// char str[100]; //char addr[20];/// int j; LPCSTR psz=inet_ntoa(*(struct in_addr*)pHost->h_addr_list[i]); m_IPAddr.AddString(psz); char pr; char* pp=≺ itoa(i,pp,1); m_IPAddr.AddString(pp); } }} 再多一句程序某处好像应该有AfxSocketInit()保证您的代码在此之后就该没问题了吧。 if you don't like to use "memset", you can use "ZeroMemory" instead!char hostname[MAX_PATH];ZeroMemory(hostname, MAX_PATH) 对不起呀!我写到CSDN上写错了,但其实我是用的memset(hostname,0,MAX_PATH);我不相信你们能得到显示出本机的名字!是不行的!我试过N遍了 跟 我的机子有关系吗?我用的是P4,DDR内存!奇怪在P4不能得到值,但在P2上能正常进行,好怪!!!! windbg 这个窗口的句柄 该如何得到呢? 如何在程序中控制选中List Control控件中的某几项被选中,或不选中?? VC类的问题 我在一台机器上安装好了COM+应用程序,我在另外一台机器上调用,安全性该怎么设置呢?设置角色该用什么呢? 请问发email 到底是怎样的一个过程? 如何在我的应用程序中控制数码相机? vc5.0里应用crystal的问题 TreeCtrl和rect的问题 求助~我需要高手帮我用VC++来做个三维图像重建的程序 报酬商议 vc 中clistbox 多选和单选属性如何在程序中动态改变 COM+怎么部署?
你MAX_PATH是怎么定义的?
但如果加上它,在使用了gethostname后,hostname为空值,这是为什么???不信你们
大家自己使用一下........小弟迷惑
还有人知道吗?
沿用下來的.股name length要求不小於25.請檢查
char hostname[MAX_PATH];
memset(hostname,0,MAX_PATH); if (gethostname(hostname,MAX_PATH) == SOCKET_ERROR)
{
MessageBox(NULL,"得本机名错误!","发生错误!",MB_OK);
//return;
}
AfxMessageBox((CString)hostname); TRACE(_T("hostname %s\n"), hostname);
//////////////////////////////////////////////////hostname 肯定是取出来的了。好像主要的区别就是
0.MAX_PATH
0,MAX_PATH
.
,不知道您是怎么通过编译的。
Error executing cl.exe.是这种错误吗? 如果是:请讲编译目录(Debug, Release)下的文件全删掉重新编译。memset(hostname,0.MAX_PATH);
上面0后的点号是你故意写的还是不小心,应该用","的,"."永远错误.我在我自己的机子上试验,是对的
请参考:
void CGetIPDlg::OnQuary()
{
// TODO: Add your control notification handler code here
char szHostName[MAX_PATH];
memset(szHostName,0,MAX_PATH);////char szT[20];
if(gethostname(szHostName,128)==0)
{
m_HostName.SetWindowText(szHostName);
struct hostent *pHost;
int i;
pHost=gethostbyname(szHostName);
for(i=0; pHost!=NULL&&pHost->h_addr_list[i]!=NULL; i++)
{
// char str[100];
//char addr[20];
/// int j;
LPCSTR psz=inet_ntoa(*(struct in_addr*)pHost->h_addr_list[i]);
m_IPAddr.AddString(psz);
char pr;
char* pp=≺
itoa(i,pp,1);
m_IPAddr.AddString(pp);
}
}
}
AfxSocketInit()
保证您的代码在此之后就该没问题了吧。
ZeroMemory(hostname, MAX_PATH)
我写到CSDN上写错了,但其实我是用的
memset(hostname,0,MAX_PATH);
我不相信你们能得到显示出本机的名字!
是不行的!我试过N遍了
奇怪在P4不能得到值,但在P2上能正常进行,好怪!!!!