我正在尝试使用 ether_ntoa 打印 MAC 地址。当我尝试做
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 专家,我会感谢她的帮助。
非常感谢!