结构的长度
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




