C++字符*缓冲区的大小



有没有一种方法可以通过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变量。因此,我需要使用另一种方法来确定长度。

没有办法根据指向数组元素的指针来确定数组的大小。

以下是找出尺寸的典型方法:

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

相关内容

  • 没有找到相关文章

最新更新