首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ether_ntoa指针转换问题

ether_ntoa指针转换问题
EN

Stack Overflow用户
提问于 2010-06-04 02:40:21
回答 3查看 4.2K关注 0票数 2

我正在尝试使用ether_ntoa打印MAC地址。当我试着去做

代码语言:javascript
复制
printf("MAC (src): %s\n",ether_ntoa((struct ether_addr *)&eheader->ether_shost));

我有一个分割错误,所以我想出了两种不同的方法:

这是第1号代码片段:

代码语言:javascript
复制
struct ether_header *eheader;
char *p;
...
p = ether_ntoa(struct ether_addr *) &eheader->ether_shost);
printf("-MAC (src): %s\n",p);

我得到的警告是:

赋值使整数中的指针不受强制转换

所以我做演员然后..。

这是第2号代码片段:

代码语言:javascript
复制
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 *

代码语言:javascript
复制
extern char *ether_ntoa (__const struct ether_addr *__addr) __THROW;

所以我不知道我做错了什么。问题是“不”的警告,是分割错误后,当我试图打印它。

我在openSUSE下得到了这个错误(在ubuntu中,我不需要做这个*p技巧),所以如果这里有一个openSUSE专家,我会感谢她的帮助。

非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2010-06-04 04:17:43

本警告如下:

代码语言:javascript
复制
assignment makes pointer from integer without a cast

...is不是添加强制转换的邀请。它告诉您一个更严重的问题;在本例中,编译器认为ether_ntoa()返回一个int

这种情况发生在您使用一个没有范围声明的函数时;对于像这样的库函数,这意味着您没有包含正确的标头。对于ether_ntoa(),您需要#include <netinet/ether.h>

票数 2
EN

Stack Overflow用户

发布于 2010-06-04 02:56:30

这听起来确实像是头/库和编译器之间的字号不匹配。你在那台Suse机器里有64位和32位环境的奇怪组合吗?

票数 0
EN

Stack Overflow用户

发布于 2010-06-04 12:34:13

是图书馆的问题。我不知道我怎么没有检查(也许是因为这是一个由老师提供的文件和所有所需的库)。这样做包括:

代码语言:javascript
复制
#include <netinet/ether.h>

是解决办法,所以我认为这个问题得到了答案。

非常感谢你们俩。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2971175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档