C++ char* 缓冲区的大小

C++ Size of char* buffer

有没有办法通过 C++ 中的 char* 指针来确定 char[] 缓冲区的大小?我正在使用 C++98。

下面几行代码都打印出'8'(本质上是sizeof(char*))。但是我正在寻找缓冲区的实际大小。

int maxBufferLen = 24;
char* buffer = new char[maxBufferLen];

std::cout << sizeof(buffer) << std::endl; // prints '8'
std::cout << ( sizeof(buffer) / sizeof(buffer[0]) ) << std::endl; // prints '8'

实际上,我在函数之间传递 char* 缓冲区,我将无法访问我用来初始化它的 maxBufferLen 变量。因此,我需要使用另一种方法来确定长度。

一般无法根据指向数组元素的指针确定数组的大小。

以下是确定尺寸的典型方法:

  • 将大小存储在变量中
    • 它的一个变体是将指针和大小(或者,指针越过末尾)都存储为 class 的成员。这种方法的一个示例是 std::span class 模板(此标准 class 不在 C++98 中,但您可以编写自己的有限版本)。
      • this 的一个变体,通常在动态分配数组时使用(例如在您的示例中),用于在 class 的析构函数中释放内存并符合 RAII 习惯用法。这种方法的示例是 std::stringstd::vector.
  • 或者选择某个元素值来表示数组的最后一个元素。在迭代数组的时候,遇到这个“终止符”元素,就告诉你已经到了终点。这通常与字符串一起使用,尤其是在使用空终止符 ('[=13=]') 的 C 接口中。