【发布时间】:2020-07-16 01:00:56
【问题描述】:
有没有办法通过 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 变量。因此,我需要使用另一种方法来确定长度。
【问题讨论】:
-
抱歉,这是不可能的。 C++ 不能以这种方式工作。您必须自己跟踪所有动态分配数组的大小,方法是在某处以某种形式或方式存储每个数组的显式大小。
-
这就是为什么存在像
std::vector和std::string这样的类。没有它们,您必须跟踪所有这些尺寸。 -
如果您以
struct mybuf { char* buffer; size_t size; };开头并添加“少数”成员函数和免费函数,那么您就回家了:std::string。 -
你没有得到
sizeof(char),根据定义是1。你会得到sizeof(char*)或指针的大小。