有没有一种方法可以通过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::string
和std::vector
- this的一个变体,通常在动态分配数组时使用(例如在您的示例中(,是在类的析构函数中释放内存,并符合RAII习惯用法。这种方法的例子是
- 这种方法的一个变体是将指针和大小(或者,指针超过末尾(存储为类的成员。这种方法的一个例子是
- 或者选择某个元素值来表示数组的最后一个元素。当迭代数组时;终止符";元素告诉您已经到达了终点。这通常与字符串一起使用,尤其是在C接口中,其中使用了空终止符(
' '
(