1

我在 C 中执行以下操作以从主机名获取 IP 地址。它打印IP是?*?,所以它不起作用。我究竟做错了什么?

 char * targetHostName = server_proxy_hostname;
 char * targetPort = server_proxy_port;
 struct hostent *info;
 info = gethostbyname(targetHostName);
 char ** ipAddresslist;
 ipAddresslist =info -> h_addr_list;
 char * ipAddress = ipAddresslist[0];

 printf("IP is %s\n", ipAddress);
4

1 回答 1

1

您假设它返回一个字符串(事实并非如此)。

获取主机名()

字符 **h_addr_list

此主机的 IP 地址列表。虽然这是一个 char**,但它实际上是一个变相的 struct in_addr*s 数组。最后一个数组元素为 NULL。

您需要使用inet_ntoa()、inet_aton()、inet_addr将值转换为正确的输出格式。

于 2016-03-02T19:09:28.270 回答