CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

结构的长度

楼主diecode(老死鸡)2001-10-10 12:55:20 在 Delphi / VCL组件开发及应用 提问

testrec=record  
          age:integer;  
          name:array[1..10]of   char;  
          next:array[1..3]of   char;  
  end;  
   
  该结构的长度怎么为20;在C语言里面为17  
  这是为什么?  
  问题点数:20、回复次数:7Top

1 楼Crob(Take Everything Easy!)回复于 2001-10-10 12:59:20 得分 0

c里面是怎么定义的?Top

2 楼enlightenment(破冰超人)回复于 2001-10-10 13:01:07 得分 5

试试testrec=packed   record  
  Top

3 楼enlightenment(破冰超人)回复于 2001-10-10 13:03:57 得分 0

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
   
      TForm1   =   class(TForm)  
          Button2:   TButton;  
          procedure   Button2Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  type  
  testrec=record  
          age:integer;  
          name:array[1..10]of   char;  
          next:array[1..3]of   char;  
  end;  
   
  testrec1=packed   record  
          age:integer;  
          name:array[1..10]of   char;  
          next:array[1..3]of   char;  
  end;  
   
  var  
      m1:testrec;  
      m2:testrec1;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
      ShowMessage(IntTOStr(Sizeof(m2)));  
  end;  
   
  end.  
   
  Top

4 楼zds0707(周)回复于 2001-10-10 13:04:02 得分 0

    用enlightenment(阿明--进入准冬眠状态的超人)  
      是对的。  
      Top

5 楼Crob(Take Everything Easy!)回复于 2001-10-10 13:09:13 得分 0

以下是我的程序中的Delphi和Vc的两个对应结构,通过TCP/IP传输后完全正常  
  //delphi...............  
      TOrder_online   =   record        
          CUST_ID   :   integer;  
          LEVEL_ID   :   integer;  
          PROD_STRU_N   :   integer;  
          FEE_MODE_N   :   integer;  
          ISUPGRADE   :   integer;  
          LEVEL_ID_UP   :   integer;  
          FEE_WAY   :   char;  
          CUST_CHAR   :   char;  
          PRICE   :   array[0..9]   of   char;  
      end;  
   
  //VC.........  
  typedef   struct   tagOrder_online  
  {  
  int   cust_id;  
  int   level_id;  
  int   prod_stru_n;  
  int   fee_mode_n;  
  int   isupgrade;  
  int   level_id_up;  
  char   fee_way;  
  char   cust_char;  
  char   price[10];  
  }tagOrder_onlineX;Top

6 楼xzgyb(老达摩)回复于 2001-10-10 13:42:21 得分 10

为了提高总线传输效率,通常都是进行位对齐的,一般是以4位对齐的,记录在没有packed时  
  为了对齐,17需补3位,为20位,除了用packed,也可{$A-},关掉对齐放式,或也可用  
  {$A1},{$A2},{$A4},{$A8},来试试Top

7 楼qingxin(清新)回复于 2001-10-10 13:55:22 得分 5

xzgyb说得对极了,我也碰到过这种情况。  
  project->Options->compiler属性页,去掉code   generation->Aligned   record   fields的选项。Top

相关问题

  • 结构体数据长度的问题
  • 帮忙看一下里面结构的长度,关于_int16在结构中的长度问题
  • pb中怎样取得结构的长度?
  • c++中空的结构体的长度问题
  • 怎样得到包含long的结构体长度?
  • 弱智问题:怎样得到结构体的长度?
  • 如何动态增长结构的长度?(C++)
  • 如何计算字符串或结构体的长度???
  • 如何取得表的结构,列的属性和长度?Oracle
  • 请问,结构中成员的长度能不能动态定义.内详

关键词

  • 结构
  • testrec
  • cust
  • fee
  • tform
  • integer
  • record
  • packed
  • array
  • level

得分解答快速导航

  • 帖主:diecode
  • enlightenment
  • xzgyb
  • qingxin

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo