C++ Builder 参考手册 ➙ System::Sysutils ➙ AnsiStrAlloc
分配一个 Delphi 兼容的 ANSI 字符串内存,这是过时的函数
头文件:#include <System.SysUtils.hpp>
命名空间:System::Sysutils
函数原型:
char * __fastcall AnsiStrAlloc(unsigned Size);
参数:
- Size: 要分配内存的 char 的个数,实际分配内存的字节数 = Size + 4
返回值:
- 分配一个 Delphi 兼容的 ANSI 字符串内存,返回指向字符串首字符的指针,如果不考虑内存的内部结构,可以像 C 语音字符串那样使用返回地址所指向的内存;
- 如果要释放这个函数分配的内存,需要使用 StrDispose 函数;
- 可以通过函数 StrBufSize 获取内存里面可以存放的字节数,即分配内存时调用 AnsiStrAlloc 的参数值;
- 实际分配内存的过程 (通过分析源码得到的):
- 分配 Size + 4 个字节的内存 (假设分配的内存为 unsigned char *ptr);
- 这个内存的前 4 个字节的内容是一个无符号整数,值 = Size + 4 (那么就是
*(unsigned int *)ptr = Size+4)
,即在分配的内存的最前面 4 个字节记住实际分配内存的字节数; - 返回值等于指向这个内存的第 4 个字节 (即 return (char *)(ptr+4);),字符串的内容都存放在从这个地址开始的位置了;
- 这是过时的函数,由于 ANSI 编码原因已经移动到 System.AnsiStrings.hpp 这个头文件里面了;
- 这是过时的函数,因为 AnsiString 可以自动管理内存,不需要这个函数了。
例子:请参考 StrBufSize 的例子。
相关:
- 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