C++ char* 缓冲区的大小

Wal*_*uin 0 c++ buffer char c++98

有没有办法char[]通过char*C++ 中的指针来确定缓冲区的大小?我正在使用 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'
Run Code Online (Sandbox Code Playgroud)

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

eer*_*ika 5

一般基于在一个指针数组的大小至数组的元素的任何方式。

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

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