如下面的代码:
#include <iostream>
#include <string>
#define BUF_LEN_HEAP 32
#define BUF_LEN_STACK 64
int getBufLen(const char *buf)
{
//...
}
void foo(const char *buf)
{
int len = getBufLen(buf);
//memcpy(new_buf, buf, len);
//...
}
int main()
{
char buf_stack[BUF_LEN_STACK];
char *buf_heap = new char[BUF_LEN_HEAP];
std::string str("abcdef");
foo(buf_stack);
foo(buf_heap);
foo(str.c_str());
delete [] buf_heap;
return 0;
}
如果获取缓冲区的长度很难将参数传递给函数。
是否有低级方法来获取缓冲区的长度,无论堆栈或堆上分配的缓冲区是什么?
答案 0 :(得分:2)
不,没有办法在声明它的方法之外获取数组的大小,并且只有在使用静态长度声明数组时(在编译时才知道)。
处理此问题的常用方法是将指针和大小都传递给写入缓冲区的任何函数,就像memcpy
一样。
使用c ++总是有更好的选择来使用std::vector
而不是普通数组。 std::vector
在一个易于传递的对象中包含所有需要的信息。