字串

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()