参数与prototype:struct in_addr不兼容

时间:2017-10-15 03:36:50

标签: c

我正在尝试在我的C程序中打印一些输出。

当我使用cc编译时,我收到此错误:

  

" whoisclient.c",第70行:参数#1与原型不兼容:     prototype:struct in_addr {union {..} S_un}:   " /usr/include/arpa/inet.h" ;,第61行参数:指向char的指针

在我的代码的这一部分:

 printf("Addresses\n");
      int j=0;
      while(hp ->h_addr_list[j]!=NULL){
        printf("hp_addr_list[%d] = %s\n", j, inet_ntoa(hp->h_addr_list[j]));
        j++;
      }

我尝试添加星号或添加/删除hp->,但我没有想法。我不完全理解错误信息以及它说我做错了什么。

1 个答案:

答案 0 :(得分:3)

inet_ntoa函数采用struct in_addr,其中包含IPv4地址的数字表示,并返回指向包含该IP地址的文本表示的字符串的指针。

h_addr_list的{​​{1}}字段是指向字符串指针数组的指针,每个字符串都包含一个IPv4地址。这与struct hostent期待的内容不兼容。

由于您已经拥有IP地址的字符串表示形式而不是数字表示形式,因此您无需通过inet_ntoa传递它来进行转换。只需将字符串直接传递给inet_ntoa

printf

编辑:

如评论中所述,printf("hp_addr_list[%d] = %s\n", j, hp->h_addr_list[j]); 成员(定义为类型h_addr_list)实际上是以网络字节顺序指向网络地址的指针数组。这样的元素与char **的内容相同。因此struct in_addr需要投放到char *,然后解除引用:

struct in_addr *