Perché il terzo parametro di pcap_next_ex è un tipo di puntatore incompatibile?

StackOverflow https://stackoverflow.com/questions/430678

  •  08-07-2019
  •  | 
  •  

Domanda

Dichiarazione di non responsabilità: si tratta di un compito a casa, ma la domanda non riguarda il compito, ma solo la stranezza della sintassi generale.

Sto cercando di usare libpcap nel contesto di un programma molto più grande, ma quando provo a ottenere l'intestazione del pacchetto e i dati per ciascun pacchetto gcc si lamenta che il terzo parametro di pcap_next_ex è di un tipo di puntatore incompatibile. Ecco un po 'di codice di esempio per vedere di cosa sto parlando:

#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;
}

Le pagine man hanno indicato che il prototipo di pcap_next_ex () è:

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

Come sta esattamente passando un tipo di puntatore incompatibile? Grazie.

È stato utile?

Soluzione

Cambia la dichiarazione di pktData in:

const u_char *pktData;

e gcc dovrebbero smettere di lamentarsi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top