一个C代码指针编译错误的算法

一个C代码指针编译错误的算法,c,pointers,math,C,Pointers,Math,我在这个示例代码块的最后一条指令中收到以下错误 sdl = (struct sockaddr_dl *)(sin + 1); 指向不完整类型“struct sockaddr\u inarp”的指针上的算术运算 我删除了所有不必要的代码 有人能帮忙吗 int test(void) { int mib[6]; size_t needed; char *host, *lim, *buf, *next; struct rt_msghdr

我在这个示例代码块的最后一条指令中收到以下错误

sdl = (struct sockaddr_dl *)(sin + 1);
指向不完整类型“struct sockaddr\u inarp”的指针上的算术运算

我删除了所有不必要的代码

有人能帮忙吗

int test(void)
{

        int mib[6];
        size_t needed;
        char *host, *lim, *buf, *next;
        struct rt_msghdr *rtm;
        struct sockaddr_inarp *sin;
        struct sockaddr_dl *sdl;

        mib[0] = CTL_NET;
        mib[1] = PF_ROUTE;
        mib[2] = 0;
        mib[3] = AF_INET;
        mib[4] = NET_RT_FLAGS;
        mib[5] = RTF_LLINFO;

        if ((buf = malloc(needed)) == NULL)
            err(1, "malloc");

        lim = buf + needed;

        for (next = buf; next < lim; next += rtm->rtm_msglen)
        {
            rtm = (struct rt_msghdr *)next;
            sin = (struct sockaddr_inarp *)(rtm + 1);
            sdl = (struct sockaddr_dl *)(sin + 1);
        }
}
int测试(无效)
{
int-mib[6];
所需尺寸;
char*host、*lim、*buf、*next;
结构rt_msghdr*rtm;
结构sockaddr_inarp*sin;
结构sockaddr_dl*sdl;
mib[0]=CTL_NET;
mib[1]=PF_路由;
mib[2]=0;
mib[3]=AF_INET;
mib[4]=净放射性标志;
mib[5]=RTF_linfo;
if((buf=malloc(需要))==NULL)
错误(1,“malloc”);
lim=需要的buf+;
对于(next=buf;nextrtm\m格伦)
{
rtm=(struct rt_msghdr*)next;
sin=(结构sockaddr_inarp*)(rtm+1);
sdl=(结构sockaddr_dl*)(sin+1);
}
}

它与指针算法无关,而是缺少
sockaddr\u inarp
结构的定义。是否包含定义的头文件?您可能需要
#include
来解决该错误。但是还有更多,例如,
needed
是在没有初始化的情况下使用的。@Someprogrammerdude错误消息是由于指针算法造成的。Had代码是
sdl=(struct sockaddr_dl*)(sin/*+1*/),则不会出现错误消息“指向不完整类型'struct sockaddr_inarp'的指针上的算术运算”。@chux错误消息的重要部分是“不完整类型”。这意味着尚未定义类型
struct sockaddr\u inarp
。它已被声明,或者会有其他错误,但尚未定义。这当然意味着编译器不知道结构的大小,因此无法使用指针算法,但根本原因仍然是缺少结构定义。非常感谢@Someprogrammerdude#他失踪了。代码在模拟器上运行得很好,但当我试图从iPhone上运行时,文件未找到编译错误。