Я пытаюсь распечатать MAC-адрес с помощью ether_ntoa. Когда я пытаюсь сделать
printf("MAC (src): %s\n",ether_ntoa((struct ether_addr *)&eheader->ether_shost));
Я получил ошибку сегментации, поэтому я предложил два разных подхода:
Это код фрагмента № 1:
struct ether_header *eheader;
char *p;
...
p = ether_ntoa(struct ether_addr *) &eheader->ether_shost);
printf("-MAC (src): %s\n",p);
и предупреждение, которое я получаю:
присваивание делает указатель из
целое число без приведения
так что я снимаюсь и ...
Это код фрагмента №2:
struct ether_header *eheader;
char *p;
...
p = (char *) ether_ntoa((struct ether_addr *) &eheader->ether_shost);
printf("-MAC (src): %s\n",p);
и предупреждение, которое я получаю:
приведение к указателю от целое число из
разный размер
Если вы посмотрите на страницу руководства, то ether_ntoa определяется следующим образом, возвращая char *:
extern char *ether_ntoa (__const struct ether_addr *__addr) __THROW;
так что я не знаю, что я делаю неправильно. Проблема заключается не в предупреждении, а в ошибке сегментации, которая возникает после того, как я пытаюсь ее напечатать.
Я получаю эту ошибку в openSUSE (в Ubuntu мне не нужно делать * p трюк), поэтому, если здесь есть эксперт openSUSE, я буду признателен за ее помощь.
Большое спасибо!