StrAlloc - C++ Builder

C++ Builder 參考手冊(cè) ? System::Sysutils ? StrAlloc


分配一個(gè) Delphi 兼容的字符串內(nèi)存

頭文件:#include <System.SysUtils.hpp>
命名空間:System::Sysutils
函數(shù)原型:

System::WideChar * __fastcall StrAlloc(unsigned Size);

參數(shù):

  • Size: 要分配內(nèi)存的字符個(gè)數(shù),實(shí)際分配內(nèi)存的字節(jié)數(shù) = Size * sizeof(char16_t) + 4

返回值:

  • 分配一個(gè) Delphi 兼容的 UTF-16 字符串內(nèi)存 (相當(dāng)于 UnicodeString 字符串),返回指向字符串首字符的指針,如果不考慮內(nèi)存的內(nèi)部結(jié)構(gòu),可以像 C 語(yǔ)音字符串那樣使用返回地址所指向的內(nèi)存;
  • 如果要釋放這個(gè)函數(shù)分配的內(nèi)存,需要使用 StrDispose 函數(shù);
  • 可以通過(guò)函數(shù) StrBufSize 獲取內(nèi)存里面可以存放的字節(jié)數(shù),即分配內(nèi)存時(shí)調(diào)用 StrAlloc 的參數(shù)值;
  • 實(shí)際分配內(nèi)存的過(guò)程 (通過(guò)分析源碼得到的):
    1. 分配 Size*2 + 4 個(gè)字節(jié)的內(nèi)存 (假設(shè)分配的內(nèi)存為 char16_t *ptr);
    2. 這個(gè)內(nèi)存的前 4 個(gè)字節(jié)的內(nèi)容是一個(gè)無(wú)符號(hào)整數(shù),值 = Size*2 + 4 (那么就是 *(unsigned int *)ptr = Size*2+4),即在分配的內(nèi)存的最前面 4 個(gè)字節(jié)記住實(shí)際分配內(nèi)存的字節(jié)數(shù);
    3. 返回值等于指向這個(gè)內(nèi)存的第 4 個(gè)字節(jié) (即 return (ptr+2);) (地址 +2 的原因是 UTF-16 每個(gè)字符 2 個(gè)字節(jié),2 個(gè)字符就是 4 個(gè)字節(jié)),字符串的內(nèi)容都存放在從這個(gè)地址開(kāi)始的位置了;
  • 這是過(guò)時(shí)的函數(shù),因?yàn)?UnicodeString 可以自動(dòng)管理內(nèi)存,不需要這個(gè)函數(shù)了。

例子:請(qǐng)參考 StrBufSize 的例子。


相關(guān):


C++ Builder 參考手冊(cè) ? System::Sysutils ? StrAlloc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容