我試圖通過使用ether_ntoa打印MAC地址。當我嘗試做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);
,並警告我獲得的是:
作業指針從 整數沒有投
所以我做演員和...
這是代碼段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這樣定義,返回的char *:
extern char *ether_ntoa (__const struct ether_addr *__addr) __THROW;
,所以我不知道我做錯了。問題在於「不是」警告,是我在嘗試打印時出現的分段錯誤。
我在openSUSE下得到這個錯誤(在ubuntu中我不需要這樣做* p技巧),所以如果在這裏有openSUSE專家,我會很感激她的幫助。
非常感謝!
有這個確切的問題,解決它與此。我期待編譯器會抱怨隱式聲明。 – Aatch 2011-05-30 02:26:05