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ò)分析源碼得到的):
- 分配 Size*2 + 4 個(gè)字節(jié)的內(nèi)存 (假設(shè)分配的內(nèi)存為 char16_t *ptr);
- 這個(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ù); - 返回值等于指向這個(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):
- System::Sysutils::StrAlloc
- System::Sysutils::AnsiStrAlloc
- System::Sysutils::WideStrAlloc
- System::Sysutils::StrBufSize
- System::Sysutils::StrNew
- System::Sysutils::StrDispose
- System::Sysutils
- System::UnicodeString
- System::StringOfChar
- System
- std::malloc
- std::calloc
- std::realloc
- std::free
- <cstdlib>
C++ Builder 參考手冊(cè) ? System::Sysutils ? StrAlloc