字符串

String 表示一系列字符,有两种形式:

可变长度

Dim Value As String

可变长度 String 允许追加和截断,并作为 COM BSTR 存储在内存中。它由一个 4 字节的无符号整数组成,它以字节为单位存储字符串的长度,后跟字符串数据本身作为宽字符(每个字符 2 个字节),以 2 个空字节结束。因此,VBA 可以处理的最大字符串长度为 2,147,483,647 个字符。

结构的内部指针(可由 StrPtr() 函数检索)指向数据的内存位置,而不是长度前缀。这意味着 VBA String 可以直接传递需要指向字符数组的指针的 API 函数。

由于长度可以更改,因此每次分配变量时,VBA 都会为 String 重新分配内存,这会对重复更改它们的过程施加性能损失。

固定长度

Dim Value As String * 1024    'Declares a fixed length string of 1024 characters.

固定长度字符串为每个字符分配 2 个字节,并作为简单字节数组存储在内存中。分配后,String 的长度是不可变的。它们在内存中不会以空值终止,因此填充分配有非空字符的内存的字符串不适合传递给期望空终止字符串的 API 函数。

固定长度字符串带有传统的 16 位索引限制,因此长度最多只能为 65,535 个字符。尝试分配比可用内存空间更长的值不会导致运行时错误 - 相反,结果值将被截断:

Dim Foobar As String * 5
Foobar = "Foo" & "bar"
Debug.Print Foobar          'Prints "Fooba"

转换为任一类型的 String 的转换函数是 CStr()