C++ Builder 參考手冊 ? System::Sysutils ? AnsiStrAlloc
分配一個 Delphi 兼容的 ANSI 字符串內(nèi)存,這是過時的函數(shù)
頭文件:#include <System.SysUtils.hpp>
命名空間:System::Sysutils
函數(shù)原型:
char * __fastcall AnsiStrAlloc(unsigned Size);
參數(shù):
- Size: 要分配內(nèi)存的 char 的個數(shù)柱衔,實(shí)際分配內(nèi)存的字節(jié)數(shù) = Size + 4
返回值:
- 分配一個 Delphi 兼容的 ANSI 字符串內(nèi)存夺刑,返回指向字符串首字符的指針,如果不考慮內(nèi)存的內(nèi)部結(jié)構(gòu)翎蹈,可以像 C 語音字符串那樣使用返回地址所指向的內(nèi)存淮菠;
- 如果要釋放這個函數(shù)分配的內(nèi)存,需要使用 StrDispose 函數(shù)荤堪;
- 可以通過函數(shù) StrBufSize 獲取內(nèi)存里面可以存放的字節(jié)數(shù)合陵,即分配內(nèi)存時調(diào)用 AnsiStrAlloc 的參數(shù)值枢赔;
- 實(shí)際分配內(nèi)存的過程 (通過分析源碼得到的):
- 分配 Size + 4 個字節(jié)的內(nèi)存 (假設(shè)分配的內(nèi)存為 unsigned char *ptr);
- 這個內(nèi)存的前 4 個字節(jié)的內(nèi)容是一個無符號整數(shù)拥知,值 = Size + 4 (那么就是
*(unsigned int *)ptr = Size+4)
踏拜,即在分配的內(nèi)存的最前面 4 個字節(jié)記住實(shí)際分配內(nèi)存的字節(jié)數(shù); - 返回值等于指向這個內(nèi)存的第 4 個字節(jié) (即 return (char *)(ptr+4);)低剔,字符串的內(nèi)容都存放在從這個地址開始的位置了速梗;
- 這是過時的函數(shù),由于 ANSI 編碼原因已經(jīng)移動到 System.AnsiStrings.hpp 這個頭文件里面了襟齿;
- 這是過時的函數(shù)姻锁,因?yàn)?AnsiString 可以自動管理內(nèi)存,不需要這個函數(shù)了猜欺。
例子:請參考 StrBufSize 的例子位隶。
相關(guān):
- System::Sysutils::StrAlloc
- System::Sysutils::AnsiStrAlloc
- System::Sysutils::WideStrAlloc
- System::Sysutils::StrBufSize
- System::Sysutils::StrNew
- System::Sysutils::StrDispose
- System::Sysutils
- System::AnsiString
- System::StringOfChar
- System
- std::malloc
- std::calloc
- std::realloc
- std::free
- <cstdlib>
C++ Builder 參考手冊 ? System::Sysutils ? AnsiStrAlloc