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