I am still pretty new to pointers so need help with this. I am writing program that will list network adapter.
This is the whole code;
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;
}
My issue is with this part:
struct ifaddrs *addresses;
if (getifaddrs(&addresses == -1)) {
printf("getifaddrs call failed!\n");
return -1;
}
when compiling i get this error:
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;
| ~~~~~~~~~~~~~~~~~^~~~~~
I have tried to cast the address pointer to both int and char before using it, but it keeps giving the same error and if i outcomment the whole if-else that contains the error handling, then i get thrown a segmetation fault.
Also a void pointer didn't help.
Thanks
You have your closing parenthesis in the wrong place in this line:
if (getifaddrs(&addresses == -1)) {
It should be
if (getifaddrs(&addresses) == -1) {
The segmentation fault you get when you comment out the if else block is probably because you are trying to use the uninitialised pointer.