DELPHI5 的BUG吗?(100分)

  • 主题发起人 主题发起人 徐永进
  • 开始时间 开始时间

徐永进

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DELPHI5的企业版中,碰到如下情况:
type
tpstruc=record
i:integer;
name:array[1..8]of char;
x,y,z:double;
bz:char;
Ano:char;
end;
.......
var
p:tpstruc;
.......

showmessage(inttostrsizeof(p));

结果是48,在VC6.0中用struc是38;
当我用各个测试的时候,即
sizeof(p.i)----4;
sizeof(p.name)----8;
sizeof(p.x)-----8;
sizeof(p.y)-----8;
sizeof(p.z)-----8;
sizeof(p.bz)-----1;
sizeof(p.ano)-----1;
4+8+8+8+8+1+1=38<>48
怎么回事???

当i,name;x,y,z;bz,ano分别作为一组的时候是正确的!!!
 
这与Delphi的记录中各个字段对齐方式相关,
Delphi缺省使用按双字对齐的方式,如果想让
你的记录在Delphi和VC中具有同样的Size,也就是
按照字节对齐,需要在记录定义前加上packed关键字
也就是
type
tpstruc = packed record
.....
end;
 
这样写就好了。原因在于 Delphi 和 VC 的字节对齐方式不同。

tpstruc=packed record
i:integer;
name:array[1..8]of char;
x,y,z:double;
bz:char;
Ano:char;
end;

inttostr(sizeof(p)) = 38
 
Sorry ,贴子晚了,不是有意的。
 
牛,这么清楚
 
BUG是有的,但你的问题不是。
Delphi5的1#补丁已有了!

总感觉有补丁的软件用起来才放心!
 
大家好!!我的问题已经解决!!
但是,尽管38是正确的,但是,当我
读用VC写的文件的时,还是错位!
后面的两个字节读不出来,还是错位!!
谢谢!
 
谢谢!!只是我的后两位还是没有办法!!
分数给你门了!!
 
多人接受答案了。
 
;我想如果用流一次读入 38 个 Byte ,然后用 FillChar 或者 Move 批量填充结构变量
应该就好了,也就是说不一个一个地读写。
这样效率也高一些。
 
谢谢BAKUBAKU!
 

Similar threads

I
回复
0
查看
851
import
I
I
回复
0
查看
746
import
I
I
回复
0
查看
515
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部