结构的长度

diecode 2001-10-10 12:55:20
testrec=record
age:integer;
name:array[1..10]of char;
next:array[1..3]of char;
end;

该结构的长度怎么为20;在C语言里面为17
这是为什么?
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crob 2001-10-10
  • 打赏
  • 举报
回复
c里面是怎么定义的?
qingxin 2001-10-10
  • 打赏
  • 举报
回复
xzgyb说得对极了,我也碰到过这种情况。
project->Options->compiler属性页,去掉code generation->Aligned record fields的选项。
xzgyb 2001-10-10
  • 打赏
  • 举报
回复
为了提高总线传输效率,通常都是进行位对齐的,一般是以4位对齐的,记录在没有packed时
为了对齐,17需补3位,为20位,除了用packed,也可{$A-},关掉对齐放式,或也可用
{$A1},{$A2},{$A4},{$A8},来试试
Crob 2001-10-10
  • 打赏
  • 举报
回复
以下是我的程序中的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;
zds0707 2001-10-10
  • 打赏
  • 举报
回复
用enlightenment(阿明--进入准冬眠状态的超人)
是对的。
enlightenment 2001-10-10
  • 打赏
  • 举报
回复
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.

enlightenment 2001-10-10
  • 打赏
  • 举报
回复
试试testrec=packed record

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧