¿Por qué el tercer parámetro para pcap_next_ex es un tipo de puntero incompatible?

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

  •  08-07-2019
  •  | 
  •  

Pregunta

Descargo de responsabilidad: Esto es para una tarea, pero la pregunta no se refiere a la tarea, sino a la rareza general de la sintaxis.

Estoy tratando de usar libpcap en el contexto de un programa mucho más grande, pero cuando trato de obtener el encabezado del paquete y los datos para cada paquete, gcc se queja de que el tercer parámetro para pcap_next_ex es de un tipo de puntero incompatible. Aquí hay un código de muestra para ver de qué estoy hablando:

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

Las páginas man indicaron que el prototipo para pcap_next_ex () es:

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

¿Cómo es exactamente lo que estoy pasando un tipo de puntero incompatible? Gracias.

¿Fue útil?

Solución

Cambie la declaración de pktData para leer:

const u_char *pktData;

y gcc deberían dejar de quejarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top