[英]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.