[英]Convert result of inet_ntop to string
如何将函数inet_ntop
(const char *) 的返回值转换为string
?
代码:
string ip = inet_ntop(b->ifa_addr->sa_family,tempAddrPtr,addressOutputBuffer, sizeof(addressOutputBuffer));
总是导致段错误...
struct ifaddrs *a;
void *tempAddrPtr = NULL;
struct ifaddrs *b;
char addressOutputBuffer[INET6_ADDRSTRLEN];
int i=0;
i=getifaddrs(&a);
cout << i;
b=a;
cout << name;
for (b = a; b; b = b->ifa_next) {
cout << b->ifa_name;
if(b->ifa_addr->sa_family == AF_INET)
tempAddrPtr = &((struct sockaddr_in *)b->ifa_addr)->sin_addr;
else
tempAddrPtr = &((struct sockaddr_in6 *)b->ifa_addr)->sin6_addr;
printf(" Internet Address: %s \n",
inet_ntop(b->ifa_addr->sa_family,
tempAddrPtr,
addressOutputBuffer,
sizeof(addressOutputBuffer)));
string ip = inet_ntop(b->ifa_addr->sa_family,tempAddrPtr,addressOutputBuffer, sizeof(addressOutputBuffer));
}
freeifaddrs(a);
inet_ntop 返回 char*,如果您的 inet_ntop 返回,将正确生成字符串 ip 对象。 突兀的部分是inet_ntop参数,带指针的参数。
一些调试提示:
1. check b is null or not
2. tempAddrPtr is valid or not
3. addressOutputBuffer is valid or not
问题是你的演员:
if(b->ifa_addr->sa_family == AF_INET)
tempAddrPtr = &((struct sockaddr_in *)b->ifa_addr)->sin_addr;
else
tempAddrPtr = &((struct sockaddr_in6 *)b->ifa_addr)->sin6_addr;
应该:
tempAddrPtr = &(reinterpret_cast<struct sockaddr_in*>(b->ifa_addr)->sin_addr);
tempAddrPtr = &(reinterpret_cast<struct sockaddr_in6*>(b->ifa_addr)->sin_addr);
或丙:
tempAddrPtr = &((struct sockaddr_in*)(b->ifa_addr)->sin_addr);
tempAddrPtr = &((struct sockaddr_in6*)(b->ifa_addr)->sin_addr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.