为什么下列代码中的动态数组不需要REDIM?
- VB code
Private Sub Command1_Click() Dim FileNumber As Integer Dim sFile() As String, S As String Dim FileByte() As Byte Dim dateStr() As String FileNumber = FreeFile ' ????CancelError???? True ComDiaReader.CancelError = True On Error GoTo ErrHandler ' ????? ComDiaReader.Flags = cdlOFNHideReadOnly ' ???????? ComDiaReader.Filter = "All Files (*.*)|*.*|sp3 Files" & "(*.sp3)|*.sp3|" ' ???????????????? ComDiaReader.FilterIndex = 2 ' ???????????????? ComDiaReader.ShowOpen ' ???????????????? Open ComDiaReader.FileName For Binary As #FileNumber ReDim FileByte(LOF(FileNumber) - 1) Get #FileNumber, , FileByte S = StrConv(FileByte, vbUnicode) sFile = Split(S, Chr(10) & "*") Close #FileNumber For i = 1 To Val(UBound(sFile)) Text1.Text = Text1.Text & "1" sFile(i) = Mid(sFile(i), 3, 16) Next iErrHandler: ' ?????????????????? Exit SubEnd Sub
动态数组不是需要REDIM吗?为什么用split函数就可以省去redim?求解。
另:乱码为注释,不影响阅读。
[解决办法]
dim A() as ....次命令执行其实是定义一个Long(4字节)的变量位置,redim是创建一个数组,并将数组(事实上是数组头)的位置(指针)拷贝到A这个变量中。
split会根据需要,自己申请一个数组需要的空间,然后将数据数组位置(既指向数组头的指针)拷贝到A中
因此,代码中不需要字节redim