2014-06-08 4 views
0

J'ai un index pour l'interface réseau dont j'ai reçu un paquet (c.-à-d. 2), et j'ai besoin de trouver le nom d'interface, qui devrait retourner "eth0". J'utilise if_indextoname().impossible de convertir 'char **' en 'char *'

Je ne suis pas beaucoup plus familier avec le C++ sur Ubuntu, mais mon code supprime un erreur:

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

que quelqu'un peut me aider à résoudre ce problème?

#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

vous passez un tableau de 'char *' quelque chose qui attend un 'char *'. Peut-être que vous vouliez dire 'char ifname [IF_NAMESIZE];' (ou une taille plus grande, ou utilisez le tampon d'un 'std :: string' de cette taille dans C++ 11). – chris

+5

Cela n'a rien à voir avec Linux ou Ubuntu. C'est juste C++. Un tableau de 'char *' ne peut pas se désintégrer en un 'char *'. – juanchopanza

+0

Merci chris; fixé! –

Répondre

2

char *ifname[10]; déclare 10 pointeurs char.

Je suppose que ce dont vous avez besoin est un pointeur char.
char* ifname = new char[IF_NAMESIZE+1] devrait résoudre votre problème. Alternativement, vous pouvez simplement allouer un tampon char automatique, si vous ne voulez pas le passer à d'autres fonctions.

char ifname[IF_NAMESIZE+1]

+1

Faire simplement 'char ifn [IF_NAMESIZE + 1] =" ";' utiliser l'allocation 'auto' semble plus approprié. – alk

+0

Bien sûr, ajouté cela aussi. – cppcoder

+0

Merci. Et j'ai juste regardé 'IF_NAMESIZE', et il est en effet' # define'ed dans '/ usr/include/net/if.h'. – alk