我正在尝试使用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 ++指针是否可以跨越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
指针初始化怀疑
这个警告:
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] 举报,一经查实,本站将立刻删除。