2010-12-14 154 views
0
在我的C++

應用我有wrriten驗證碼: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]);} 
當我調試打印我看到,當我有靜態IP像10.0.0.12它打印它正確

。但從DHCP的IP如192.168.14.12它打印它「-64.-88.14.12」

我該如何解決這個問題?

10x

回答

0

將%d改爲%hhu's。

%d是有符號整數。 %u是無符號整數。 %hhu是無符號字符。

這段代碼說明了爲什麼:

#include <cstdio> 

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

輸出:4294967232, 192, -64

+0

當我改變它%u我得到而不是:192.168.14.12我得到:4294967232.4294967208.14.12 – gln 2010-12-14 09:43:13

+0

那麼,你可以粘貼實際的代碼,而不是重寫一個? – x13n 2010-12-14 09:45:54

+0

沒關係,我已經更新了我的答案。 – x13n 2010-12-14 09:50:02

0

好像它試圖爲籤打印字節。嘗試在IP地址內使用%u而不是%d。

+0

當我將它改爲%u我得到的不是:192.168.14.12我得到:4294967232.4294967208.14.12 – gln 2010-12-14 09:44:07