在堆栈和堆上使用低级方法获取缓冲区的长度

时间:2013-11-15 06:50:43

标签: c++

如下面的代码:

#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;
}

如果获取缓冲区的长度很难将参数传递给函数。

是否有低级方法来获取缓冲区的长度,无论堆栈或堆上分配的缓冲区是什么?

1 个答案:

答案 0 :(得分:2)

不,没有办法在声明它的方法之外获取数组的大小,并且只有在使用静态长度声明数组时(在编译时才知道)。

处理此问题的常用方法是将指针和大小都传递给写入缓冲区的任何函数,就像memcpy一样。

使用c ++总是有更好的选择来使用std::vector而不是普通数组。 std::vector在一个易于传递的对象中包含所有需要的信息。