微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ether_ntoa指针投射问题

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

printf("MAC (src): %sn",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): %sn",p);

我得到的警告是:

memcpy – 从不同大小的整数转换为指针

共享父subprocess之间的指针

Linux内核代码中的“current”

C sockaddr函数调用sendto?

C ++指针是否可以跨越EXE和DLL?

赋值使得整型指针没有强制转换

所以我做演员和…

这是代码nº2:

struct ether_header *eheader; char *p; ... p = (char *) ether_ntoa((struct ether_addr *) &eheader->ether_shost); printf("-MAC (src): %sn",p);

我得到的警告是:

从不同大小的整数转换为指针

如果你看看手册页,ether_ntoa是这样定义的,返回一个char *

extern char *ether_ntoa (__const struct ether_addr *__addr) __THROW;

所以我不知道我做错了什么。 问题是“不是”的警告,是我尝试打印时发生的分割错误

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

非常感谢你!

使用MapViewOfFile,指针最终走出内存空间

使用Ptrace来跟踪正在打开的文件的位置

从库中查找argc和argv

指针初始化怀疑

什么决定了在调用delete的时候写入C ++指针的内容

这个警告:

assignment makes pointer from integer without a cast

…不是添加演员表的邀请 这是告诉你一个更严重的问题。 在这种情况下,编译器认为ether_ntoa()返回一个int 。

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

这听起来像头/库和编译器之间的字符大小不匹配。 那台Suse机器中有64位和32位的混合环境吗?

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

#include <netinet/ether.h>

解决方案,所以我认为这个问题的答案。

非常感谢你们俩。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐