**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
17天前关闭
Improve this question的
我仍然是相当新的指针,所以需要帮助这一点。我写的程序,将列出网络适配器。
这是整个代码;
int main() {
struct ifaddrs *addresses;
if (getifaddrs(&addresses == -1)) {
printf("getifaddrs call failed!\n");
return -1;
}
struct ifaddrs *address = addresses;
while (address) {
int family = address->ifa_addr->sa_family;
if (family == AF_INET || family == AF_INET6) {
printf("%s\t", address->ifa_name);
printf("%s\t", family == AF_INET ? "IPv4" : "IPv6");
char ap[100];
const int family_size = family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
getnameinfo(address->ifa_addr, family_size, ap, sizeof(ap), 0, 0, NI_NUMERICHOST);
printf("\t%s\n", ap);
}
address = address->ifa_next;
}
freeifaddrs(addresses);
return 0;
}
字符串
我的问题是这部分:
struct ifaddrs *addresses;
if (getifaddrs(&addresses == -1)) {
printf("getifaddrs call failed!\n");
return -1;
}
型
编译时,我得到这个错误:
integer without a cast [-Wint-conversion]
11 | if (getifaddrs(&addresses == -1)) {
| ~~~~~~~~~~~^~~~~
| |
| int
I fil inkluderet fra list_adapter.c:5:
/usr/include/ifaddrs.h:66:41: bemærk: expected »struct ifaddrs **« but argument is of type »int«
66 | extern int getifaddrs (struct ifaddrs **__ifap) __THROW;
| ~~~~~~~~~~~~~~~~~^~~~~~
型
在使用它之前,我试图将地址指针转换为int和char,但它一直给出相同的错误,如果我outcomment包含错误处理的整个if-else,那么我会抛出一个分段错误。
另外,空指针也没有帮助。
谢啦,谢啦
2条答案
按热度按时间ejk8hzay1#
您在这一行中的右括号放错了位置:
字符串
应该是这样
型
注解掉if else块时出现的分段错误可能是因为您试图使用未初始化的指针。
mkshixfv2#
下面是代码的回顾:
1.代码从main函数开始,它作为程序的入口点。
1.它声明了一个struct ifaddrs* 类型的变量addresses。此结构用于存储有关网络接口地址的信息。
1.调用getfaddrs函数来用网络接口信息填充addresses变量。通过将getfaddrs的返回值与-1进行比较来检查错误条件。但是,条件中有一个错误。应该是if(getfaddrs(&addresses)== -1)。当前条件if(getfaddrs(&addresses == -1))不正确。4..如果getfaddrs返回错误,则打印失败消息,并且程序返回-1以指示错误。
1.声明一个新的指针变量address并为其赋值。此指针用于遍历网络接口地址。
1.在循环中,代码使用地址结构的ifa_addr字段检索当前网络接口的地址族(IPv4的AF_INET或IPv6的AF_INET6)。
1.如果地址族是IPv4或IPv6,则使用printf打印有关接口的信息。
1.代码使用getnameinfo函数将二进制网络地址转换为可读格式,并将其存储在ap数组中。
1.最后,地址变量被更新为指向地址链表中的下一个网络接口(ifa_next字段)。
1.在循环之后,调用freeifaddrs函数以释放由getfaddrs函数分配的内存。
以下是一些可能的解决方案,可以修复调用getfaddrs的if语句中的条件:
解决方案1使用括号与-1进行比较。
在此解决方案中,条件被修改为将&地址括在括号内,以确保正确执行与-1的比较。
字符串
}
解决方案2将返回值赋给单独的变量
此解决方案将getfaddrs的返回值分配给单独的变量result,然后执行与-1的比较。
型
解决方案3颠倒比较
这里,使用逻辑NOT运算符(!)。此解决方案检查getfaddrs的返回值是否不等于-1,以确定函数调用是否成功。
型
}
这些解决方案中的任何一个都将纠正if语句中的条件,并确保代码正确处理错误情况。