gpt4 book ai didi

c - ether_ntoa 指针转换问题

转载 作者:太空狗 更新时间:2023-10-29 12:21:59 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com