【问题标题】:How to pass an array with fixed length strings to a function如何将具有固定长度字符串的数组传递给函数
【发布时间】:2021-06-13 05:24:06
【问题描述】:

我正在尝试将一个固定长度的字符串数组传递给一个函数。但是,该函数将不知道字符串的大小。该参数应采用任何大小的字符串。我该怎么办?这是我的代码:

Public Type myRecord
    names(15)  As String * 250
End Type

函数定义:

Function HasQuotes(textArr() As String) As String

End Function

用法:

HasQuotes(rowRec.names)

其中rowRecMyRecord

当我运行此代码时,我收到以下错误Type Mismatch: array or user defined type expected。这是因为参数未定义为textArr() As String * 250。如何使参数接受任何字符串长度?

【问题讨论】:

  • 如果“参数应该采用任何大小的字符串”,那么您处理的是可变长度字符串,而不是固定长度字符串。事实上,您的函数示例确实指定了可变长度的字符串。
  • rowrec.names 是如何定义的?是字符串 * 250 的数组吗?
  • @StayOnTarget 是的,这是正确的。它是一个字符串数组 * 250
  • 为什么HasQuotes 必须接受任意长度的字符串?
  • 为什么不通过UDT呢?

标签: vb6


【解决方案1】:

你必须遵循正确的语法,你可以尝试遵循更新的代码

Private Type myRecord
    names(15) As String * 250
End Type

Private Sub Command1_Click()

    Dim rowRec As myRecord
    rowRec.names(0) = ("Vaibhav")

    Dim v As String
    v = HasQuotes(rowRec.names)

End Sub

Function HasQuotes(ByRef textArr() As String * 250) As String
    MsgBox textArr(0)
End Function

【讨论】:

  • OP 说HasQuotes 函数应该接受任意长度固定长度字符串数组,而不仅仅是String * 250
【解决方案2】:

您将无法传递一个固定长度的字符串数组任意长度。一个简单的解决方案是将它们转换为可变长度字符串数组:

Private Sub Test()
   Dim rowRec As myRecord
   Dim names(15) As String
   Dim i As Integer
   Dim s As String
   
   rowRec.names(0) = "Brian"
   rowRec.names(15) = "Stafford"

   'move the data to an array of variable-length strings
   For i = 0 To 15
      names(i) = rowRec.names(i)
   Next
   
   s = HasQuotes(names)

   'move the data back to the original array if needed
   For i = 0 To 15
      rowRec.names(i) = names(i)
   Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2017-04-05
    相关资源
    最近更新 更多