主题:[原创]下标越界?
lcrxl1815
[专家分:110] 发布于 2008-09-17 19:43:00
Private Sub MSC_OnComm()
Select Case MSC.CommEvent
Case comEvReceive
Do
buf = MSC.Input
T = T + 1
If T > 10000 Then Exit Do
Loop Until (Left(buf, 1) = "=" And Len(buf) = 9)
‘保证buf是一个以 “=“开始的 9位数据,用do…loop进行循环等待。
ReDim ary(Len(buf))
For i = 1 To Len(buf)
ary(i - 1) = Mid(buf, i, 1)
Next ‘将buf重新定义为数组型
[color=FF0000]If ary(Len(buf) - 1) = "-" Then [/color]‘判断buf的最高位是否为“-“
For i = 0 To Len(buf) - 1
buf1 = buf1 + ary(i)
Next
txtReceive1.Text = buf1 ‘如果为“-”,将赋值给txtReceive1.Text
buf1 = ""
Else
For i = 0 To Len(buf) - 1
buf1 = buf1 + ary(i)
Next
txtReceive2.Text = buf1 ‘否则将赋值给txtReceive2.Text
buf1 = ""
End If
Case comEvSend
End Select
End Sub
为什么在运行时,有的时候正常,有的时候在If ary(Len(buf) - 1) = "-" Then 这一句会出现错误提示:下标越界,
真的不知哪儿错了,想请高手帮帮忙!
回复列表 (共17个回复)
沙发
guoyong_cy [专家分:3050] 发布于 2008-09-17 21:02:00
If T > 10000 Then Exit Do
?????????????????????????
板凳
lcrxl1815 [专家分:110] 发布于 2008-09-17 21:09:00
为了保证不是死循环,确定的循环次数
3 楼
moz [专家分:37620] 发布于 2008-09-17 21:39:00
[quote]if right(buf,1)="-" then txtReceive1.Text=buf else txtReceive2.Text=buf[/quote]
4 楼
lcrxl1815 [专家分:110] 发布于 2008-09-17 21:59:00
谢谢moz, 你说的这个我以前用过了,是没问题的,
现在的问题是:If ary(Len(buf) - 1) = "-" Then 这个语句为什么会出现 下标越界 这个错误?
5 楼
moz [专家分:37620] 发布于 2008-09-17 23:18:00
在这一行出错的时候,
点击调试,
Ctrl + G 进入立即窗口
? len(buf) 检查一下值到底是多少
6 楼
lcrxl1815 [专家分:110] 发布于 2008-09-17 23:24:00
是0呀
7 楼
moz [专家分:37620] 发布于 2008-09-17 23:57:00
嗯,是零,为什么会是零,是零的话还不是越界吗?
8 楼
lcrxl1815 [专家分:110] 发布于 2008-09-18 08:12:00
是呀!看来前面的do...loop语句还是无法保证每一次(Left(buf, 1) = "=" And Len(buf) = 9) 成立
9 楼
moz [专家分:37620] 发布于 2008-09-18 09:11:00
我也没话说了,潜水去.
10 楼
wdkshp [专家分:5490] 发布于 2008-09-18 15:25:00
首先, 建议在循环次数达到10000次准备退出循环前,添加buf="=00000000",表示连续错误数据或者为接收到初始化数据。
下标越界的问题我觉得不是在 If ary(Len(buf) - 1) = "-" Then 这一句,
而是他的下一句 For i = 0 To Len(buf) - 1
你试者将这句改成 For i = 0 To Len(buf) - 1 [color=FF0000]step 1[/color][color=000000][color=000000]我以前遇到过一次类似的问题,可能是由于-1的原因,vb系统时误以为-1前漏掉了step关键词[/color][/color]
我来回复