2014-06-08 157 views
0

我有一個網絡接口的索引,我從中得到一個數據包(即2),並且需要找到接口的名稱,它應該返回"eth0"。我正在使用if_indextoname()無法將'char **'轉換爲'char *'

我沒有太多熟悉C++在Ubuntu,但我的代碼刪除一個錯誤:

cannot convert char** to char* for argument 2 to char* if_indextoname(unsigned int, char*)

有人可以幫我解決?

#include <net/if.h> 
#include <iostream>  

int main() 
{ 
    unsigned int ifindex = 2; 
    char *ifname[10]; 
    std::cout << if_indextoname(ifindex, ifname); 
    std::cout << ifname << std::endl; 
} 
+5

你傳遞'字符*'的東西數組期望一個'字符*'。也許你的意思是'char ifname [IF_NAMESIZE];'(或者更大的尺寸,或者在C++ 11中使用這個尺寸的'std :: string'的緩衝區)。 – chris

+5

它與Linux或Ubuntu無關。它只是C++。一個'char *'數組不能衰減到'char *'。 – juanchopanza

+0

謝謝克里斯;固定! –

回答

2

char *ifname[10];聲明10個字符指針。

我猜你需要的是一個字符指針。
char* ifname = new char[IF_NAMESIZE+1]應該解決您的問題。

或者,你可以只分配一個自動字符緩衝區,如果你不想傳遞給其他函數。

char ifname[IF_NAMESIZE+1]

+1

簡單地做'char ifn [IF_NAMESIZE + 1] =「」;''使用'auto'分配似乎更合適。 – alk

+0

當然,並補充說。 – cppcoder

+0

謝謝。我查了一下'IF_NAMESIZE',它確實是在'/ usr/include/net/if.h'中定義的'#define'。 – alk