2010-12-14 4 views
0

dans mon C++ application que j'ai wrriten ce code:appel système Linux getifaddr 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]);} 

quand je déboguer l'impression que je vois quand j'ai IP statique comme 10.0.0.12 il imprime correctement. mais IP de DHCP comme 192.168.14.12 il l'imprime "-64.-88.14.12"

comment puis-je résoudre ce problème?

10x

Répondre

0

Modifier% de s en% hhu.

% d est un nombre entier signé. % u est un nombre entier non signé. % hhu est non signé car.

Ce code montre pourquoi:

#include <cstdio> 

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

Sortie: 4294967232, 192, -64

+0

quand je l'ai changé en% u je reçois au lieu de: 192.168.14.12 je reçois: 4294967232.4294967208.14.12 – gln

+0

Eh bien, pouvez-vous coller le code réel, pas réécrire un? – x13n

+0

Peu importe, j'ai mis à jour ma réponse. – x13n

0

On dirait qu'il essaie d'imprimer octets comme signé. Essayez d'utiliser% u au lieu de% d dans l'adresse IP.

+0

quand je l'ai changé en% u je reçois au lieu de: 192.168.14.12 je reçois: 4294967232.4294967208.14.12 – gln

Questions connexes