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