gpt4 book ai didi

c - 参数与原型(prototype) : struct in_addr 不兼容

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:37 24 4
gpt4 key购买 nike

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

当我用cc编译时,我得到这个错误:

"whoisclient.c", line 70: argument #1 is incompatible with prototype: prototype: struct in_addr {union {..} S_un} : "/usr/include/arpa/inet.h", line 61 argument : pointer to 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-> 但我没有想法。我不完全理解错误消息以及它所说的我做错了什么。

最佳答案

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

struct hostenth_addr_list 字段是指向字符串指针数组的指针,每个字符串都包含一个 IPv4 地址。这与 inet_ntoa 的预期不兼容。

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

printf("hp_addr_list[%d] = %s\n", j, hp->h_addr_list[j]);

编辑:

如评论中所述,定义为 char ** 类型的 h_addr_list 成员实际上是一个指向网络字节顺序网络地址的指针数组。这样的元素与 struct in_addr 的内容相同。所以 char * 需要转换为 struct in_addr * 然后取消引用:

printf("hp_addr_list[%d] = %s\n", j, inet_ntoa(*((struct in_addr *)hp->h_addr_list[j])));

关于c - 参数与原型(prototype) : struct in_addr 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46751427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com