C99中隐式声明函数'ether_ntoa'是无效的。

7

这是一系列从手机中获取IP和Mac地址的函数之一。

strcpy(temp, (char *)ether_ntoa((const struct ether_addr *)LLADDR(sdl)));

编辑:不需要等价函数,只是缺少一些头文件。

编辑:向LLADDR(sdl)添加转换。


尽管它声称是Mac OS X手册页,但它似乎包含在iOS开发库中。http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/ether_ntoa.3.html - trojanfoe
请查看此链接中的Objective C代码,可能会对您有所帮助,该代码由“amcgregor”提供。https://gist.github.com/1265265 - Kevin Horgan
2个回答

15

据我所理解,错误信息并未声称函数丢失,只是你没有包含它的声明。(我不知道它是否存在,只是消息有不同的抱怨。)

如果有帮助的话,man ether_ntoa告诉我:

#include <sys/types.h>
#include <sys/socket.h>
#include <net/ethernet.h>

看起来我漏掉了 #include <net/ethernet.h>。但是现在我得到了新的错误:"Incompatible pointer types passing 'caddr_t' (aka 'char *') to parameter of type 'const struct ether_addr *'"。我猜这是一个类型转换相关的错误? - Orchid
我不熟悉LLADDR,但是由于ether_ntoa参数被称为const struct ether_addr *,我猜你对问题的原因是正确的。 - Phillip Mills
3
以上评论中的错误是在传递给ether_ntoa()的参数上出现了类型错误,因为LLADDR(sdl)返回的是一个char *类型,但是ether_ntoa()需要另外一种类型。通过强制类型转换解决: ether_ntoa((const struct ether_addr *)LLADDR(sdl))),现在一切似乎仍然正常工作。 - Orchid

0

我包含了以下头文件,源代码编译成功:

#import <arpa/inet.h>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接