Почему третий параметр pcap_next_ex является несовместимым типом указателя? - PullRequest
0 голосов
/ 10 января 2009

Отказ от ответственности: это для домашнего задания, но вопрос не в назначении, а в странности общего синтаксиса.

Я пытаюсь использовать 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)

Как именно то, что я передаю несовместимый тип указателя? Спасибо.

1 Ответ

7 голосов
/ 10 января 2009

Измените объявление pktData следующим образом:

const u_char *pktData;

и gcc должен перестать жаловаться.

...