【问题标题】:Why is the third parameter to pcap_next_ex an incompatible pointer type?为什么 pcap_next_ex 的第三个参数是不兼容的指针类型?
【发布时间】:2023-03-20 09:22:01
【问题描述】:

免责声明:这是针对家庭作业的,但问题不在于作业,而只是关于一般语法怪异。

我试图在一个更大的程序的上下文中使用 libpcap,但是当我尝试获取每个数据包的数据包头和数据时,gcc 抱怨 pcap_next_ex 的第三个参数是不兼容的指针类型。下面是一些示例代码,看看我在说什么:

#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>

int main()
{
    pcap_t *pcap;
    char pcapErr[PCAP_ERRBUF_SIZE];
    struct pcap_pkthdr *pktHeader;
    u_char *pktData;

    pcap = pcap_open_offline("somefile.pcap", pcapErr);
    if (pcap == NULL)
    {
        fprintf(stderr, "pcap_open_offline failed: %s\n", pcapErr);
        exit(EXIT_FAILURE);
    }

    while (pcap_next_ex(pcap, &pktHeader, &pktData) == 1)
    {
        // do things here
    }

    pcap_close(pcap);

    return EXIT_SUCCESS;
}

手册页指出 pcap_next_ex() 的原型是:

int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)

我传递的指针类型不兼容到底是什么?谢谢。

【问题讨论】:

    标签: c pointers pcap


    【解决方案1】:

    将pktData的声明改为:

    const u_char *pktData;
    

    gcc 应该停止抱怨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多