我正在尝试使用ether_ntoa打印MAC地址。当我试着去做
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专家,我会感谢她的帮助。
非常感谢!
发布于 2010-06-04 04:17:43
本警告如下:
assignment makes pointer from integer without a cast...is不是添加强制转换的邀请。它告诉您一个更严重的问题;在本例中,编译器认为ether_ntoa()返回一个int。
这种情况发生在您使用一个没有范围声明的函数时;对于像这样的库函数,这意味着您没有包含正确的标头。对于ether_ntoa(),您需要#include <netinet/ether.h>。
发布于 2010-06-04 02:56:30
这听起来确实像是头/库和编译器之间的字号不匹配。你在那台Suse机器里有64位和32位环境的奇怪组合吗?
发布于 2010-06-04 12:34:13
是图书馆的问题。我不知道我怎么没有检查(也许是因为这是一个由老师提供的文件和所有所需的库)。这样做包括:
#include <netinet/ether.h>是解决办法,所以我认为这个问题得到了答案。
非常感谢你们俩。
https://stackoverflow.com/questions/2971175
复制相似问题