【问题标题】:Convert result of inet_ntop to string将 inet_ntop 的结果转换为字符串
【发布时间】:2012-11-18 05:25:28
【问题描述】:

如何将函数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的代码。最重要的是如何分配addressOutputBuffer 以及该变量如何获取其值。
  • 您是说第一个 inet_ntop 工作正常,而第二个出现故障?

标签: c++ string sockets inet-ntop


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    问题在于你的选角:

    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);
    

    或 C:

    tempAddrPtr = &((struct sockaddr_in*)(b->ifa_addr)->sin_addr);
    tempAddrPtr = &((struct sockaddr_in6*)(b->ifa_addr)->sin_addr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2017-07-17
      相关资源
      最近更新 更多