免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2658 | 回复: 11
打印 上一主题 下一主题

结构体? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-02 10:55 |只看该作者 |倒序浏览


  1. typedef struct{
  2.         char a[5];
  3. }A;

  4. typedef struct{
  5.         int b;
  6. }B;

  7. main(){
  8.         void *buf=malloc(30);
  9.         memset(buf,0,30);
  10.         A *a=(A*)buf;
  11.         strcpy(a->a,"test");

  12.         B *b=(B*)(a+1);
  13.         b->b=10;//想打印这个10

  14.         printf("%s\n",buf);//现在可以打印出test来,但我想打印出10,该怎么写?
  15.         return;
  16. }



复制代码


这代码是写着玩的。并非什么设计,只是偿试一下tcp组装包时用到的方法。诸位要有点包容心,

[ 本帖最后由 dxbh 于 2008-6-2 16:10 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-06-02 11:02 |只看该作者
你到底想干吗呀?
b都越界了吧。

论坛徽章:
0
3 [报告]
发表于 2008-06-02 11:06 |只看该作者
原帖由 lenovo 于 2008-6-2 11:02 发表
你到底想干吗呀?
b都越界了吧。


没有越界吧,malloc(30),sizeof(A)+sizeof(B)才多少?

论坛徽章:
0
4 [报告]
发表于 2008-06-02 11:09 |只看该作者
printf("%d\n",buf+sizeof(A));
printf("%d\n",b->b);
或者把AB整合成一个大的结构体;
其实不知道你想做什么。。

论坛徽章:
0
5 [报告]
发表于 2008-06-02 11:13 |只看该作者


  1. printf("%s,%d\n",buf,((B*)(buf+sizeof(A)))->b);//搞定啰,虽然代码有点丑

复制代码

论坛徽章:
0
6 [报告]
发表于 2008-06-02 11:17 |只看该作者
b越界了

论坛徽章:
0
7 [报告]
发表于 2008-06-02 11:19 |只看该作者
原帖由 dxbh 于 2008-6-2 11:13 发表


printf("%s,%d\n",buf,((B*)(buf+sizeof(A)))->b);//搞定啰,虽然代码有点丑



如果真的写出这样的代码,我怀疑LZ数据设计的有问题,,楼主为何偏偏要这样做。。

论坛徽章:
0
8 [报告]
发表于 2008-06-02 11:19 |只看该作者
原帖由 net_robber 于 2008-6-2 11:17 发表
b越界了


不明白b为什么会越界?

论坛徽章:
0
9 [报告]
发表于 2008-06-02 11:23 |只看该作者
原帖由 maxxfire 于 2008-6-2 11:19 发表


如果真的写出这样的代码,我怀疑LZ数据设计的有问题,,楼主为何偏偏要这样做。。



难道你没有见过,组装tcp包,把什么struct iphdr,struct tcphdr放在一起么?

论坛徽章:
0
10 [报告]
发表于 2008-06-02 13:18 |只看该作者
原帖由 dxbh 于 2008-6-2 11:23 发表



难道你没有见过,组装tcp包,把什么struct iphdr,struct tcphdr放在一起么?

设计的very ugly


  1. typedef struct{
  2.         char a[5];
  3. }A;

  4. typedef struct{
  5.         int b;
  6. }B;

  7. typedef struct{
  8.         A a;
  9.         B b;
  10. }DEST;

  11. main(){
  12.         DEST d;
  13.         strcpy(d.a.a,"test");
  14.         d.b.b=10;

  15.         printf("%s, %d\n",d.a.a, d.b.b);//现在可以打印出test来,但我想打印出10,该怎么写?
  16.         return;
  17. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP