繁体   English   中英

Linux系统调用getifaddr C ++

[英]Linux system call getifaddr c++

在我的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”

我该如何解决这个问题?

10倍

将%d更改为%hhu。

%d是有符号整数。 %u是无符号整数。 %hhu是未签名的字符。

此代码说明了原因:

#include <cstdio>

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

输出: 4294967232, 192, -64

似乎它正在尝试打印带符号的字节。 尝试使用%u代替IP地址中的%d。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM