Системный вызов Linux getifaddr c ++ - PullRequest
0 голосов
/ 14 декабря 2010

в моем приложении c ++ я написал этот код:

struct ifaddrs *ifap;

if (0 != getifaddrs(&ifap)) {
    error = errno;
    return -1;
}

addresses.clear();
for (struct ifaddrs *ifa = ifap; ifa; ifa = ifa->ifa_next) {
    sockaddr *s=ifa->ifa_addr;
    PRINT(" LocalIP sockaddr %u.%u.%u.%u \n",s->sa_data[2],s->sa_data[3],s->sa_data[4],s->sa_data[5]);}

когда я отлаживаю печать, я вижу, что когда у меня статический ip, например 10.0.0.12, он печатает правильно. но ip из DHCP вроде 192.168.14.12 печатает "-64.-88.14.12"

как я могу решить эту проблему?

10x

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

Похоже, он пытается напечатать байты как подписанные. Попробуйте использовать% u вместо% d внутри IP-адреса.

0 голосов
/ 14 декабря 2010

Изменить% d на% hhu's.

% d - целое число со знаком.% u - целое число без знака.% hhu - беззнаковый символ.

Этот код показывает, почему:

#include <cstdio>

int main()
{
        char i = 192;
        printf("%u, %hhu, %d", i,i,i);
}

Вывод: 4294967232, 192, -64

...