我一直在努力完成Jon Erikson的书中的一些程序,并且我的头文件中的结构存在一些问题。我已经在" myheader-test"中声明了一些用于包头存储的结构。但是当我尝试将它们实现到程序中时,gcc告诉我结构是未声明的。 我知道正在读取头文件,因为其他程序中声明的其他函数很乐意在其他程序中工作。此外,当我尝试在main()程序中定义结构时,它告诉我它们已经在标题中声明了。
来自myheader-test.h的:
#define ETH_ADDR_LEN 6
#define ETH_HDR_LEN 14
struct ether_hdr
{
unsigned char ether_dest_addr[ETH_ADDR_LEN];
unsigned char ether_source_addr[ETH_ADDR_LEN];
unsigned short ether_type;
};
在main() 中
来自decode funct() 来自gcc: 我认为问题在于我在程序功能中声明了结构,但我已经过了类似的例子,并且看不出有什么不同。我也尝试过将第一次引用结构转换为main并遇到同样的问题。非常感谢任何帮助,谢谢。#include "myheader-test.h"
void decode_ethernet(const unsigned char *header_start)
{
int i;
const struct ether_hdr *ethernet_header;
ethernet_header = (const struct ether_hdr *)header_start;
printf("[LAYER 2 : ETHERNET HEADER]\n");
printf("[Source : %02x]", ether_hdr->ether_src_addr[0]);
decode_sniff.c: In function ‘decode_ethernet’:
decode_sniff.c:94:29: error: ‘ether_hdr’ undeclared (first use in this function)
printf("[Source : %02x]", ether_hdr->ether_src_addr[0]);
答案 0 :(得分:0)
你正在做
ether_hdr->ether_src_addr[0]
而不是
ethernet_header->ether_source[0]
// or src_addr? dunno why it was different from the declaration before.