大家快来看看,我好像了发现的VB语言的BUG。

getian 2003-12-06 11:37:40
把下面的语句放到一个空的FROM代码中,大家认为输出的应该是几啊?
Private Type d
a As Byte
b As Long
End Type

Private Sub Form_Load()
Dim d1 As d
Debug.Print LenB(d1)
End Sub
我的机器上输出的居然是8,一个BYTE(1字节)加一个LONG(4字节)居然有8个字节,有谁能解释吗?
...全文
40 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2003-12-06
  • 打赏
  • 举报
回复
又试了一下,原来是在自定义数据类型中每个元素占的字节是元素最长字节数的N倍。

Private Type d
a As Integer
b As Integer
c As long
End Type
返回12

Private Type d
a As Integer
b As Integer
c As Integer
End Type
返回6

Private Type d
a As Integer
b As Integer
c As String * 12
End Type
这个比较奇怪,返回28

BearRui 2003-12-06
  • 打赏
  • 举报
回复
可能在自定义数据类型中每个元素都是占4个字节的。

如果用LENB的话,自定义数据类型中有N个元素就会返回4*N
sogno 2003-12-06
  • 打赏
  • 举报
回复
对齐之后,就是占8个byte嘛,很奇怪吗?
BearRui 2003-12-06
  • 打赏
  • 举报
回复
Private Type d
a As Byte
b As Long
End Type

Private Sub Form_Load()
Dim d1 As d
Debug.Print Len(d1)
End Sub
BearRui 2003-12-06
  • 打赏
  • 举报
回复
有len就行
kmzs 2003-12-06
  • 打赏
  • 举报
回复
没什么问题呀。。
getian 2003-12-06
  • 打赏
  • 举报
回复
什么意思,阁下对认为我没有把意思表达清楚?
我的意思是LENB这个函数内部有BUG,因为这个结构写到文件里确实是占5个字节
而MS的文挡中说LENB可以用来取得自定义数据类型的长度,而这里有明显的错误。

那么应该用什么方法取得正确的自定义数据类型的长度呢?
itzhiren 2003-12-06
  • 打赏
  • 举报
回复
对,是8,不过
Private Type d
a As Byte
End Type

Private Sub Form_Load()
Dim d1 As d
Debug.Print LenB(d1)
End Sub

这样输出的是1
Private Type d
b As Long
End Type

Private Sub Form_Load()
Dim d1 As d
Debug.Print LenB(d1)
End Sub

这样输出的是4
yuyu2002 2003-12-06
  • 打赏
  • 举报
回复
麻烦你先把中文练练好
佛的光辉 2003-12-06
  • 打赏
  • 举报
回复
这个结构在内存中就是8个字节
yangfanatcsdn 2003-12-06
  • 打赏
  • 举报
回复
看看C里的结构struct和联合union类型就更加明白了。
grady.lu 2003-12-06
  • 打赏
  • 举报
回复
Lenb取得自定义数据类型长度时,以自定义类型中数据基础子类型最长的为标准,然后得到长度。
TimLee✿ 2003-12-06
  • 打赏
  • 举报
回复





·_·
fleshboy 2003-12-06
  • 打赏
  • 举报
回复
VB就这样
simanh 2003-12-06
  • 打赏
  • 举报
回复
哈哈
以为是bug

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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