inet_pton()的第三个参数是什么?

时间:2015-01-22 18:57:38

标签: c

我的目标是成功调用C中的函数inet_pton。 我使用的是Windows 7.到目前为止,我了解到inet_pton有3个参数。此外,它的工作是将人类IP表示转换为计算机的二进制表示。

详细介绍了我对inet_pton(a,b,c)的论点的理解:

a:一个address_family。例如AF_INET

b:指向IP地址的人类可读表示的指针(例如“127.0.0.1”)。

c:指向存储已翻译的IP地址(二进制形式)的“事物”的指针。

在我读过的教程中,据说inet_pton将存储数组c内的翻译指向。

此页

https://msdn.microsoft.com/de-de/library/windows/desktop/cc805844(v=vs.85).aspx

告诉我,第三个参数的类型为PVOID

INT WSAAPI inet_pton(__in   INT  Family,__in   PCTSTR pszAddrString,__out  PVOID pAddrBuf);

在我看来,接收数组应该是一个char数组。但PVOID不等于char。 我的最后一个想法是涉及演员,虽然我只熟悉像

这样的场景中的演员
buffer = (char*) malloc (i+1);

目前我的代码看起来像这样:

#include <stdio.h>
#include <stdlib.h>
#include<stdio.h>
#include <windows.h>
#include <Winsock2.h>
#include <Ws2tcpip.h>
int main(int argc, char *argv[])
{
    char *ptr2="127.0.0.1";
    char buffe[512];
    PVOID *ptr3;
    PVOID ptr3=&buffe;
    inet_pton(AF_INET,ptr2,ptr3);
    system("PAUSE");    
    return 0;
}

如何正确初始化第三个参数(如果有必要)?如何处理存储IP地址的二进制表示的数组应该具有 char 类型而指针应该具有类型PVOID的事实?

我的编译器抱怨ptr3的冲突类型。 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

PVOIDvoid * typedef ,这意味着第三个参数需要通用指针。 PCTSTR最终 typedef 编辑为const char *(如果未定义UNICODE)或const wchar_t *(如果已定义UNICODE) 。有关这些特定类型的详细信息,请参阅Windows Data Types

您可以直接使用它所需的数据类型:IN_ADDR,而不是试图计算使用malloc()(提示:sizeof(IN_ADDR))分配的字节数。根据{{​​3}},当第一个参数pAddrBufIN_ADDR时,第三个参数Family必须足够大以容纳AF_INET

尝试做这样的事情:

#include <WinDef.h>
#include <Winsock2.h>
#include <Ws2tcpip.h>

int main(int argc, char *argv[]) {
    char ip_string[] = "127.0.0.1";
    IN_ADDR ip_value;
    inet_pton(AF_INET, ip_string, &ip_value);
    system("PAUSE");    
    return 0;
}