- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 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);
我收到的警告是:
assignment makes pointer from integer without a cast
所以我做 Actor 和...
这是第 2 段代码:
struct ether_header *eheader;
char *p;
...
p = (char *) ether_ntoa((struct ether_addr *) &eheader->ether_shost);
printf("-MAC (src): %s\n",p);
我收到的警告是:
cast to pointer from integer of different size
如果你看一下手册页,ether_ntoa 是这样定义的,返回一个 char *:
extern char *ether_ntoa (__const struct ether_addr *__addr) __THROW;
所以我不知道我做错了什么。问题是“不是”警告,是当我尝试打印它时出现的段错误。
我在 openSUSE 下遇到这个错误(在 ubuntu 中我不需要做这个 *p 技巧)所以如果这里有 openSUSE 专家,我将感谢她的帮助。
非常感谢!
最佳答案
这个警告:
assignment makes pointer from integer without a cast
...不是添加类型转换的邀请。它告诉你一个更严重的问题;在这种情况下,编译器认为 ether_ntoa()
返回 int
.
当您在作用域中使用没有声明的函数时,就会发生这种情况;对于这样的库函数,这意味着您没有包含正确的 header 。对于 ether_ntoa()
, 你需要 #include <netinet/ether.h>
.
关于c - ether_ntoa 指针转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2971175/
我正在尝试使用 ether_ntoa 打印 MAC 地址。当我尝试做的时候 printf("MAC (src): %s\n",ether_ntoa((struct ether_addr *)&ehea
它是从手机中检索 IP 和 Mac 地址的一系列功能的一部分。 strcpy(temp, (char *)ether_ntoa((const struct ether_addr *)LLADDR(sd
我是一名优秀的程序员,十分优秀!