簡體   English   中英

將 inet_ntop 的結果轉換為字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM