获取本机网络配置信息的程序编译失败

C++语言 码拜 7年前 (2017-04-15) 948次浏览

// hostinfo.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h”
#include<winsock2.h>
#include<iphlpapi.h>
#include<iostream>
#pragma comment(lib,”WS2_32.lib”)
#pragma comment(lib,”iphlpapi.lib”)
using namespace std;
class CInitSocket{
public:
CInitSocket(BYTE minorVer = 2,BYTE majorVer = 2){
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer,majorVer);
if(WSAStartup(sockVersion,&wsaData) != 0)
exit(0);
}
~CInitSocket(void){
WSACleanup();
}
};
int main(){
CInitSocket initSock;
char *strHost = 0;
::gethostname(strHost,256);
hostent *pHost = ::gethostbyname(strHost);
cout<<“主机名: “<<pHost->h_name<<endl;
in_addr addr;
for(int i=0;;i++){
char*p = pHost->h_addr_list[i];
if(p = NULL)break;
memcpy(&addr.S_un.S_addr,p,pHost->h_length);
char*strIp = ::inet_ntoa(addr);
cout<<“本机IP地址: “<<strIp<<endl;
}
//获取本机地址信息
u_char LocalMac[6];  //本地MAC地址
DWORD GatewayIP; //网关IP地址
DWORD LocalIP; //本地IP地址
DWORD Mask; //子网掩码
IP_ADAPTER_INFO *pAdapterInfo = NULL;
ULONG ulLen = 0;
::GetAdaptersInfo(pAdapterInfo,&ulLen);
pAdapterInfo=(PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,ulLen);
if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS){
while(pAdapterInfo != NULL){
memcpy(LocalMac,pAdapterInfo->Address,6);
GatewayIP = inet_addr(pAdapterInfo->GatewayList.IpAddress.String);
LocalIP = inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
Mask = inet_addr(pAdapterInfo->IpAddressList.IpMask.String);
cout<<“=================本地主机信息===================”<<endl;
cout<<“适配器名: “<<pAdapterInfo->AdapterName<<endl;
cout<<“适配器描述: “<<pAdapterInfo->Description<<endl;
in_addr in;
in.S_un.S_addr = LocalIP;
cout<<“IP Address: “<<::inet_ntoa(in)<<endl;
in.S_un.S_addr = Mask;
cout<<“Subnet Mask: “<<::inet_ntoa(in)<<endl;
in.S_un.S_addr = GatewayIP;
cout<<“Default Gateway: “<<::inet_ntoa(in)<<endl;
u_char*p = LocalMac;
printf(“MAC Address:%02X-%02X-%02X-%02X-%02X-%02X\n”,p[0],p[1],p[2],p[3],p[4],p[5]);
pAdapterInfo = pAdapterInfo->Next;
}
}
}
编译显示0error,但是在VS2010中。一运行就报错,单步调试时候说char *strHost = 0;有问题,本人是看着书上例子本人敲的,讨教大家怎么样修改

解决方案

50

if(p = NULL)break;
改成
if(p == NULL)break;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明获取本机网络配置信息的程序编译失败
喜欢 (0)
[1034331897@qq.com]
分享 (0)