免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: aleenhu1983
打印 上一主题 下一主题

结构体指针为什么指向自己成员的时候出错了,请高手指点! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-15 17:01 |只看该作者
那应该解包把相应的数据分别存入结构体各成员,不能直接用a指

论坛徽章:
0
12 [报告]
发表于 2006-05-15 17:03 |只看该作者
我列出来的结构体是Linux系统的,我只是调用一下,那不用a 指该怎么赋值呢?

论坛徽章:
0
13 [报告]
发表于 2006-05-15 17:10 |只看该作者
版主帮忙看看啦!在下愚钝,弄了半天还没解决这个问题....

论坛徽章:
0
14 [报告]
发表于 2006-05-15 17:16 |只看该作者
我以前出过同样的问题,指针结构套指针, 如果想这样声名的话这么写就没问题了:
  1. typedef struct a {........} a;
复制代码

声名变量的时候要写

struct a var;

试试看:wink:

论坛徽章:
0
15 [报告]
发表于 2006-05-15 17:28 |只看该作者
谢谢先!救命的稻草啊!!!!

论坛徽章:
0
16 [报告]
发表于 2006-05-15 18:01 |只看该作者
原帖由 stellit 于 2006-5-15 17:16 发表
我以前出过同样的问题,指针结构套指针, 如果想这样声名的话这么写就没问题了:
  1. typedef struct a {........} a;
复制代码

声名变量的时候要写

struct a var;

试试看:wink:


不太准确!

如果这样声明结构体
  1. typedef struct a {........} a;
复制代码


那么定义变量时就不用再加struct这个关键字了,应该是

 
a var;

[ 本帖最后由 flw10000 于 2006-5-15 18:09 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2006-05-15 18:06 |只看该作者
原帖由 aleenhu1983 于 2006-5-15 17:03 发表
我列出来的结构体是Linux系统的,我只是调用一下,那不用a 指该怎么赋值呢?


如果把buffer中的数据赋给结构体,应该为每个成员赋值,可以用string copy 或 mem copy等!

论坛徽章:
0
18 [报告]
发表于 2006-05-15 19:43 |只看该作者
struct ether_arp {
        struct        arphdr ea_hdr;                /* fixed-size header */
        u_int8_t arp_sha[ETH_ALEN];        /* sender hardware address */
        u_int8_t arp_spa[4];                /* sender protocol address */
        u_int8_t arp_tha[ETH_ALEN];        /* target hardware address */
        u_int8_t arp_tpa[4];                /* target protocol address */
};

struct ether_arp *a=NULL;
struct arphdr *b=NULL;
u_int8_t c;

a=(struct ether_arp *)buffer;
b=a->ea_hdr;
c=a->arp_tpa;

不知道你是不是这么用的。还是贴点详细的代码吧。
如果是我贴的这么用应该没问题的。
你把前后相关的代码多贴点吧。怎么用的你的数据。
还有赋值给的那个变量的定义类型。
才发现报错的那一行的代码你都没给。

[ 本帖最后由 iwome 于 2006-5-15 19:46 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2006-05-15 20:04 |只看该作者
原始程序大概如下:
报错的就在 show()函数里调用的地方.

struct ether_arp *a;
void show(void);
int main(int argc, char *argv[])
{
     int i;
     char buffer[65535] = {0};
     unsigned char *head;
   ..........................................
   //截包分析包头...
    head=buffer+12;
    a=(struct ether_arp *)head;
    if((*head==0x0&&(*(head+1)==0x06))  //判断协议,显示包数据
        show();
}//endmain

void show(void)
{
      printf("header:%d\n",a->eahdr);
      printf("dest ip = %d",a->tpa);
      printf("source ip =%d",a->spa);
      printf("dest mac =%d",a->tha);
      printf("source ip =%d",a->sha);
      return;
}

[ 本帖最后由 aleenhu1983 于 2006-5-15 20:13 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2006-05-15 20:10 |只看该作者
真奇怪,代码中间居然出现了一个笑脸...刚好和系统的页面的快捷码冲突了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP