pcap_next_exの3番目のパラメーターが互換性のないポインター型であるのはなぜですか?

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

  •  08-07-2019
  •  | 
  •  

質問

免責事項:これは宿題です。しかし、問題は割り当てに関するものではなく、一般的な構文の奇妙さです。

より大きなプログラムのコンテキストでlibpcapを使用しようとしていますが、各パケットのパケットヘッダーとデータを取得しようとすると、gccはpcap_next_exの3番目のパラメーターが互換性のないポインター型であると文句を言います。私が話していることを確認するためのサンプルコードを次に示します。

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

manページには、pcap_next_ex()のプロトタイプが次のように記載されています:

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

互換性のないポインタ型を渡すのはどのくらい正確ですか?ありがとう。

役に立ちましたか?

解決

pktDataの宣言を次のように変更します。

const u_char *pktData;

とgccは文句を言うのをやめるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top