我知道这个问题已被多次询问,不确定问题究竟在哪里。我编写了一个代码,通过在msdn库中引用 GetAdaptersAddresses 函数来获取本地计算机的IP地址.On部分中的 printf 功能将打印在控制台屏幕上。
代码如下。
#include<WinSock2.h>
#include<iphlpapi.h>
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#pragma comment(lib, "IPHLPAPI.lib")
int main(void )
{
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
DWORD retval=0;
ULONG outBufLen=sizeof(IP_ADAPTER_ADDRESSES);
retval=GetAdaptersAddresses(AF_UNSPEC,GAA_FLAG_INCLUDE_PREFIX, NULL,pAddresses, &outBufLen);
if(retval==NO_ERROR)
{
while (pAddresses) {
printf("\tAdapter name: %s\n", pAddresses->AdapterName);
printf("Description: %wS\n", pAddresses->Description);
printf("\tTransmit link speed: %I64u\n", pAddresses->TransmitLinkSpeed);
printf("\tReceive link speed: %I64u\n", pAddresses->ReceiveLinkSpeed);
pAddresses = pAddresses->Next;
}
}
else
{
printf("\n There has been an error ");
}
free(pAddresses);
}
答案 0 :(得分:1)
问题是未分配pAddresses
。至少不在您向我们展示的代码中。看看底部的例子:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365915%28v=vs.85%29.aspx
专门针对第pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
行。