WideStrAlloc - C++ Builder

C++ Builder 参考手册 ➙ System::Sysutils ➙ WideStrAlloc


分配一个 Delphi 兼容的字符串内存

头文件:#include
命名空间:System::Sysutils
函数原型:

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

参数:

  • Size: 要分配内存的字符个数,实际分配内存的字节数 = Size * sizeof(char16_t) + 4

返回值:

  • 分配一个 Delphi 兼容的 UTF-16 字符串内存 (相当于 UnicodeString 字符串),返回指向字符串首字符的指针,如果不考虑内存的内部结构,可以像 C 语音字符串那样使用返回地址所指向的内存;
  • 如果要释放这个函数分配的内存,需要使用 StrDispose 函数;
  • 可以通过函数 StrBufSize 获取内存里面可以存放的字节数,即分配内存时调用 WideStrAlloc 的参数值;
  • 函数 WideStrAlloc 和 StrAlloc 完全相同;
  • 实际分配内存的过程 (通过分析源码得到的):
    1. 分配 Size*2 + 4 个字节的内存 (假设分配的内存为 char16_t *ptr);
    2. 这个内存的前 4 个字节的内容是一个无符号整数,值 = Size*2 + 4 (那么就是 *(unsigned int *)ptr = Size*2+4),即在分配的内存的最前面 4 个字节记住实际分配内存的字节数;
    3. 返回值等于指向这个内存的第 4 个字节 (即 return (ptr+2);) (地址 +2 的原因是 UTF-16 每个字符 2 个字节,2 个字符就是 4 个字节),字符串的内容都存放在从这个地址开始的位置了;
  • 这是过时的函数,因为 UnicodeString 可以自动管理内存,不需要这个函数了。

例子:请参考 StrBufSize 的例子。


相关:

  • 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

C++ Builder 参考手册 ➙ System::Sysutils ➙ WideStrAlloc

你可能感兴趣的:(WideStrAlloc - C++ Builder)